静态链接的库是否需要与其依赖项链接?

时间:2017-04-03 04:48:47

标签: c++ c linux linker static-libraries

我构建依赖于静态库A的可执行文件,而静态库A依赖于静态库B.当我构建应用程序时,是否还需要在构建脚本中链接B?

更具体地说,我是否需要执行-la -lb,或者仅通过-la与A联系就足够了?

3 个答案:

答案 0 :(得分:3)

根据A的构建方式,您可能也可能不必与两个库建立链接。

如果A包含链接器注释记录,指示链接器也在库B中查找符号(通常包含在A中包含的一个目标文件中),则链接时不需要包含B.如果A不包含该评论记录,则必须自己包含该记录。

答案 1 :(得分:0)

如果A和B都是静态的,那么你必须按A和B(-la -lb)的顺序链接它们。有关订单的说明,请参阅this reply

静态链接程序包括与可执行文件内部链接的库。

想象一下你的程序在A里面调用foo(),在A里面的某个地方调用bar()。因此,如果A成为您的程序的一部分,那么您在程序中对bar()进行了未定义的调用,这也是您需要与B链接的原因。

例外情况是@ 1201ProgramAlarm提到的使用special Visual Studio pragma#pragma comment(lib, libname))时。

答案 2 :(得分:-1)

静态库在编译期间完全包含在使用程序中,因此它不需要任何其他文件来运行程序。

如果库A已经使用静态库B构建,则A已经具有B并且不再需要它。