Я готовлю сборку cmake для приложения qt. где я использую следующую структуру ..
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.
Спасибо, Фродо, это была проблема, теперь она работает :)
Добро пожаловать, чтобы завершить этот запрос, я также ответил на ваш вопрос в посте ;-)





Порядок записей в функции TARGET_LINK_LIBRARIES() важен. Последними должны быть упомянуты библиотеки без зависимостей, которые обычно являются некоторыми стандартными библиотеками или внешними библиотеками, в этом примере Qt5 Libs.
Пример:
Lib_A зависит от Lib_B и Lib_stdLib_B зависит от Lib_stdLib_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
)
В качестве идеи попробуйте связать ваш
${CODE_LIB_FILES}прямо как следующую запись с${TARGET_NAME}. Порядок функцииTARGET_LINK_LIBRARIES()важен. Последняя запись не должна иметь зависимостей. Таким образом, библиотеки Qt5 должны быть связаны в последнюю очередь.