Linux,静态lib引用可执行文件中的其他静态库

and*_*ras 3 c++ linux linker static

我正在创建一个应用程序,它包含两个静态库和一个可执行文件.

让我们调用两个静态库:libusefulclass.a libcore.a

和应用程序:myapp

libcore实例化并使用libusefulclass中定义的类(让我们称之为UsefulClass)

现在,如果我按以下方式链接应用程序:

g++ -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.5.4/lib -o myapp src1.o src2.o srcN.o -lusefulclass -lcore
Run Code Online (Sandbox Code Playgroud)

链接器抱怨找不到libusefulclass中的方法:

undefined reference to `UsefulClass::foo()'
Run Code Online (Sandbox Code Playgroud)

等等

我找到了一个解决方法:如果UsefulClass也在可执行文件本身的源文件中实例化,则应用程序链接没有任何问题.

我的问题是:是否有更简洁的方法使libcore引用libusefulclass中定义的方法,或者静态库只是无法相互链接?

TIA

PS:如果重要:使用Qt在C++中开发应用程序,但我觉得这不是Qt问题,而是一般的库问题.

nos*_*nos 6

您需要以依赖项的相反顺序指定库,因此请使用

g++ -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.5.4/lib -o myapp src1.o src2.o srcN.o  -lcore -lusefulclass
Run Code Online (Sandbox Code Playgroud)

如果存在循环依赖关系,您甚至可能需要两次指定库,

g++ -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.5.4/lib -o myapp src1.o src2.o srcN.o  -lusefulclass -lcore -lusefulclass
Run Code Online (Sandbox Code Playgroud)