Qt 如何强制qmake库依赖项的顺序?
我收到了很多错误,因为qmake对我正在使用的boost库进行了不正确的排序 下面是.pro文件的外观Qt 如何强制qmake库依赖项的顺序?,qt,qmake,Qt,Qmake,我收到了很多错误,因为qmake对我正在使用的boost库进行了不正确的排序 下面是.pro文件的外观 QT += core gui TARGET = MyTarget TEMPLATE = app CONFIG += no_keywords \ link_pkgconfig SOURCES += file1.cpp \ file2.cpp \ file3.cpp PKGCONFIG += my_package
QT += core gui
TARGET = MyTarget
TEMPLATE = app
CONFIG += no_keywords \
link_pkgconfig
SOURCES += file1.cpp \
file2.cpp \
file3.cpp
PKGCONFIG += my_package \
sqlite3
LIBS += -lsqlite3 \
-lboost_signals \
-lboost_date_time
HEADERS += file1.h\
file2.h\
file3.h
FORMS += mainwindow.ui
RESOURCES += Resources/resources.qrc
这将生成以下命令:
g++ -Wl,-O1 -o MyTarget file1.o file2.o file3.o moc_mainwindow.o -L/usr/lib/x86_64-linux-gnu -lboost_signals -lboost_date_time -L/usr/local/lib -lmylib1 -lmylib2 -lsqlite3 -lQtGui -lQtCore
注意:mylib1和mylib2是由另一个项目静态编译的,位于/usr/local/lib中,相应的pkg config.pc文件指向那里。pro文件通过PKGCONFIG
中的my_package
引用它们。问题不在于pkg config的输出,而在于Qt的排序
以下是.pc文件:
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: my_package
Description: My component package
Version: 0.1
URL: http://example.com
Libs: -L${libdir} -lmylib1 -lmylib2
Cflags: -I${includedir}/my_package/
链接阶段失败得惊人,因为mylib1和mylib2提供了大量未定义的引用来增强应用程序和mylib1和mylib2都在使用的库
我们有另一个使用SCON的构建方法,它正确地为链接器排序。它的构建命令顺序如下
g++ -o MyTarget file1.o file2.o file3.o moc_mainwindow.o -L/usr/local/lib -lmylib1 -lmylib2 -lsqlite3 -lboost_signals -lboost_date_time -lQtGui -lQtCore
请注意,主要区别在于boost libs的顺序。Scons将它们放在QtGui和QtCore之前的末尾,而qmake将它们放在第一位。编译命令中的其他差异并不重要,因为我已经手工修改了qmake生成的make文件,简单的重新排序修复了这个问题
因此,我的问题是,无论qmake认为.pro文件应该是什么,我如何在.pro文件中执行正确的顺序?mylib1、mylib2的.pc文件可能不完整
如果这些库依赖于-lboost\u date\u time
和-lboost\u signals
,则.pc文件应该已经通过以下方式拉入这些依赖项:
Libs: -lboost_date_time -lboost_signals
…qmake将把它们放在连接线上的正确位置。无需显式地将它们放在.pro文件中:)mylib[12]的.pc文件是否包含
Libs:-lboost\u date\u time-lboost\u signals
?不,它们没有,但确实有效!非常感谢。请将此作为答复提交,以便我可以接受。