【问题标题】:Cmake Qt5 | undefined reference to `QPrinter::QPrinter(QPrinter::PrinterMode)Cmake Qt5 |未定义对`QPrinter::QPrinter(QPrinter::PrinterMode) 的引用
【发布时间】:2018-08-23 21:36:32
【问题描述】:

我正在为 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 和 xmlpatterns 模块描述相同场景的任何示例程序

【问题讨论】:

  • 作为一个想法,尝试将您的${CODE_LIB_FILES} rigth 作为下一个条目链接到${TARGET_NAME}。函数TARGET_LINK_LIBRARIES() 的顺序很重要。最后一个条目应该没有依赖关系。所以 Qt5 库应该最后链接。
  • 谢谢佛罗多,这就是问题所在,它现在可以工作了 :)
  • 不客气,为了完成这个请求,我还在帖子中回答了你的问题 ;-)

标签: cmake qt5


【解决方案1】:

函数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
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2016-10-24
    相关资源
    最近更新 更多