当一个静态lib依赖于另一个静态lib时,是否需要指定链接依赖性?

时间:2013-05-02 18:08:26

标签: c++ qt static-libraries qmake

一般问题可以表述为 - 如果静态库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

2 个答案:

答案 0 :(得分:2)

构建静态库时,不需要在其他静态库中进行链接。

构建可执行文件时,需要包含代码所依赖的代码和库的所有库。库通常需要按正确的顺序排列。如果lib foo依赖于lib c,则必须使用-lfoo -lc。

在遥远的过去,静态库中对象文件的顺序很重要,但不多了。

答案 1 :(得分:0)

找出的最佳方法是尝试编译应用程序并查找编译错误,前提是您已包含所有已使用的外部库。 编译器是您最好的朋友。