一般问题可以表述为 - 如果静态库lib1依赖于另一个静态库lib2,我是否需要将lib2指定为lib1的链接器依赖项,或者只需要在将库链接到某个应用程序时指定链接依赖项(然后每个使用lib2的应用程序都应该链接到lib1)?
具体来说,我有很多静态库和应用程序,它们之间有一些依赖关系,如:
makeall.pro:
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS = coreLib \
anotherLib \
....
someApp
anotherLib.depends = coreLib
someApp.depends = coreLib anotherLib
coreLib.pro
TEMPLATE = lib
CONFIG += staticlib
TARGET = coreLib
#... some .cpp and .h
anotherLib.pro
TEMPLATE = lib
CONFIG += staticlib
INCLUDEPATH += PATH_TO_CORE_LIB_INCLUDES
DEPENDPATH += PATH_TO_CORE_LIB_INCLUDES
TARGET = anotherLib
#Lines in Question
someApp.pro
TEMPLATE = app
DESTDIR = ..\bin
INCLUDEPATH += PATH_TO_CORE_LIB_INCLUDES PATH_TO_ANOTHER_LIB_INCLUDES
DEPENDPATH += PATH_TO_CORE_LIB_INCLUDES PATH_TO_ANOTHER_LIB_INCLUDES
#Lines有问题
我应该使用有问题的行:
anotherLib.pro
(nothing required)
someApp.pro
PRE_TARGETDEPS += ../bin/coreLib.lib ../bin/anotherLib.lib
或
II。 anotherLib.pro
PRE_TARGETDEPS += ../bin/coreLib.lib
someApp
PRE_TARGETDEPS += ../bin/anotherLib.lib
或
III。 anotherLib.pro
PRE_TARGETDEPS += ../bin/coreLib.lib
someApp.pro
PRE_TARGETDEPS += ../bin/coreLib.lib ../bin/anotherLib.lib
答案 0 :(得分:2)
构建静态库时,不需要在其他静态库中进行链接。
构建可执行文件时,需要包含代码所依赖的代码和库的所有库。库通常需要按正确的顺序排列。如果lib foo依赖于lib c,则必须使用-lfoo -lc。
在遥远的过去,静态库中对象文件的顺序很重要,但不多了。
答案 1 :(得分:0)
找出的最佳方法是尝试编译应用程序并查找编译错误,前提是您已包含所有已使用的外部库。 编译器是您最好的朋友。