0

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

另一个Lib.pro

TEMPLATE = lib
CONFIG += staticlib
INCLUDEPATH += PATH_TO_CORE_LIB_INCLUDES
DEPENDPATH += PATH_TO_CORE_LIB_INCLUDES
TARGET = anotherLib

#有问题的行

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

#有问题的行

我应该对有问题的线路使用什么:


另一个Lib.pro

(nothing required)

someApp.pro

PRE_TARGETDEPS += ../bin/coreLib.lib ../bin/anotherLib.lib

或者:


二、另一个Lib.pro

PRE_TARGETDEPS += ../bin/coreLib.lib

一些应用程序

PRE_TARGETDEPS += ../bin/anotherLib.lib

或者


三、另一个Lib.pro

PRE_TARGETDEPS += ../bin/coreLib.lib

someApp.pro

PRE_TARGETDEPS += ../bin/coreLib.lib ../bin/anotherLib.lib
4

2 回答 2

2

构建静态库时,您不需要链接其他静态库。

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

在遥远的过去,静态库中目标文件的顺序很重要,但仅此而已。

于 2013-05-02T20:09:45.833 回答
0

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

于 2013-05-02T19:51:23.633 回答