Cmake Qt5 | undefined reference to `QPrinter::QPrinter(QPrinter::PrinterMode)

孤人 提交于 2020-01-30 00:21:49

问题


I am preparing cmake build for qt application. where I am using following structure ..

libMyApp which uses

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

and

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

libMyApp build successfully and generated libMyApp.a (static library)

Now I am using this library in my application MyApp which uses

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} is list holding path of libMyApp.a MyApp builds successfully and at last shows linking error

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

Same thing happening with xml also

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

can anyone point out what is wrong here ?

or any sample program depicting same scenario with printsupport and xmlpatterns module


回答1:


The order of the entries in the function TARGET_LINK_LIBRARIES() is important. The libraries with no dependecies shall be mentioned last which are typically some standard libraries or external libraries, in this example the Qt5 Libs.

An example:

  • Application depends
  • Lib_A depends on Lib_B and Lib_std
  • Lib_B depends on Lib_std
  • Lib_std has no dependencies

Then the call of the function shall be the following:

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

In this application I assumed that ${CODE_LIB_FILES}=libMyApp.a has some dependencies to the Qt5-Libs so it would be plausible to move this entry above the 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
)


来源:https://stackoverflow.com/questions/51994603/cmake-qt5-undefined-reference-to-qprinterqprinterqprinterprintermode

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!