C++ Linux,静态库,指可执行文件中的其他静态库

C++ Linux,静态库,指可执行文件中的其他静态库,c++,linux,static,linker,C++,Linux,Static,Linker,我正在创建一个应用程序,它由两个静态lib和一个可执行文件组成 让我们称这两个静态库为: 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 -lusefulcl

我正在创建一个应用程序,它由两个静态lib和一个可执行文件组成

让我们称这两个静态库为: 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中定义的方法,或者静态libs不能相互链接

短暂性脑缺血发作


S.:在这种情况下,应用程序是用Qt在C++中开发的,但我觉得这不是QT问题,而是一般的库问题。

< p>您需要以依赖的相反顺序指定库,所以使用

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

谢谢你,不,这确实解决了它。(备注:对我来说,反过来似乎更符合逻辑,即usefulclass优先于core,如果core依赖于usefulclass…我将记住上述规则:)链接器从存档中读取符号并丢弃任何尚未引用的内容,然后,下一个库出现了,需要链接器已经丢弃的符号——因此您必须以“相反”的顺序提供它们