我正在创建一个应用程序,它包含两个静态库和一个可执行文件。
让我们调用两个静态库: 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问题,而是一般的库问题。
答案 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