Cmake Qt5 | undefined reference to `QPrinter::QPrinter(QPrin



我正在为 qt 应用程序准备 cmake 构建。 我使用以下结构的地方..

libMyApp 其中使用

SET(QT5_MODULES Widgets PrintSupport Network XmlPatterns)
FIND_PACKAGE(Qt5 REQUIRED COMPONENTS ${QT5_MODULES})

TARGET_LINK_LIBRARIES(
${TARGET_NAME}
Qt5::Widgets
Qt5::PrintSupport 
Qt5::Network
Qt5::XmlPatterns
)

libMyApp 构建成功并生成 libMyApp.a(静态库(

现在我正在我的应用程序MyApp中使用此库 其中使用

SET(QT5_MODULES Widgets PrintSupport XmlPatterns)
FIND_PACKAGE(Qt5 REQUIRED COMPONENTS ${QT5_MODULES})
TARGET_LINK_LIBRARIES(
${TARGET_NAME}
Qt5::Widgets
Qt5::PrintSupport 
Qt5::XmlPatterns
${CODE_LIB_FILES}
)

${CODE_LIB_FILES} 是 libMyApp.a 的列表保存路径 MyApp 构建成功,最后显示链接错误

undefined reference to `QPrinter::QPrinter(QPrinter::PrinterMode)

同样的事情也发生在xml上

undefined reference to `QDomNode::isElement() const'

谁能指出这里有什么问题?

或使用 printsupport 和 XMLBpatterns 模块描述相同场景的任何示例程序

函数TARGET_LINK_LIBRARIES()中条目的顺序很重要。没有依赖关系的库应该最后提到,通常是一些标准库或外部库,在本例中是Qt5 Libs。

举个例子:

  • 应用取决于
  • Lib_A取决于Lib_BLib_std
  • Lib_B取决于Lib_std
  • Lib_std没有依赖项

那么函数的调用应如下:

TARGET_LINK_LIBRARIES(
${TARGET_NAME}   # Name of the app
"Lib_A"
"Lib_B"
"Lib_std"        # Last entries: Std Libs, external Libs, ...
)

在这个应用程序中,我假设${CODE_LIB_FILES}=libMyApp.a对Qt5-Libs有一些依赖关系,因此将此条目移动到Qt5-Libs之上是合理的。

SET(QT5_MODULES Widgets PrintSupport XmlPatterns)
FIND_PACKAGE(Qt5 REQUIRED COMPONENTS ${QT5_MODULES})
TARGET_LINK_LIBRARIES(
${TARGET_NAME}
${CODE_LIB_FILES}       # <<< Moved this entry up
Qt5::Widgets
Qt5::PrintSupport 
Qt5::XmlPatterns
)

最新更新