我正在构建一个依赖于静态库A的可执行文件,而静态库A又依赖于静态库B。当我构建我的应用程序时,是否需要在我的构建脚本中链接B呢?
更具体地说,我需要执行`-la -lb`吗?还是只需要通过`-la`链接A就足够了?
更具体地说,我需要执行`-la -lb`吗?还是只需要通过`-la`链接A就足够了?
根据A库的构建方式,您可能需要链接两个库中的一个或两个,具体情况取决于A库的构建方式。
如果A库包含链接器注释记录,指示链接器在库B中查找符号(通常包含在A库中的其中一个目标文件中),则在链接时不需要包含库B。如果A库不包含该注释记录,则必须自行包含库B。
foo()
,并且在A的某个地方调用了bar()
。因此,如果A成为您的程序的一部分,则您的程序中就会出现对bar()
的未定义调用,这就是为什么您需要链接到B的原因。#pragma comment(lib, libname)
),如@1201ProgramAlarm所提到的。静态库在编译时完全包含在使用程序中,因此运行程序时不需要任何额外的文件。
如果库A已经与静态库B构建,那么A已经具备了B的功能,不需要再次引入。