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

时间:2010-04-16 21:31:17

标签: c++ linux static linker

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

让我们调用两个静态库: 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

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

undefined reference to `UsefulClass::foo()'

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

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

TIA

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

1 个答案:

答案 0 :(得分:6)

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

g++ -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.5.4/lib -o myapp src1.o src2.o srcN.o  -lcore -lusefulclass

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

g++ -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.5.4/lib -o myapp src1.o src2.o srcN.o  -lusefulclass -lcore -lusefulclass