这些命令行选项的目的是什么?请帮助解释以下命令行的含义:
-Wl,--start-group -lmy_lib -lyour_lib -lhis_lib -Wl,--end-group -ltheir_lib
显然,它与链接有关,但是GNU手册对分组的含义很安静。
Answers:
它用于解决几个库之间的循环依赖关系(在-(
和之间列出-)
)。
引用为什么链接库的顺序有时会导致GCC错误?或man ld
http://linux.die.net/man/1/ld
-(
档案-)
或--start-group
档案--end-group
该档案应该是一个存档文件的列表。它们可以是显式文件名,也可以是-l选项。
重复搜索指定的档案,直到没有创建新的未定义引用。通常,仅按在命令行上指定的顺序搜索一次存档。如果需要该归档文件中的符号来解析由归档文件中的对象引用的未定义符号(稍后在命令行中显示),则链接程序将无法解析该引用。通过对档案进行分组,可以重复搜索所有档案,直到解析所有可能的参考。
使用此选项会产生很大的性能成本。最好仅在两个或多个归档之间存在不可避免的循环引用时使用。
因此,可以多次搜索组内的库中的新符号,而无需像 -llib1 -llib2 -llib1
PS存档基本上意味着一个静态库(*.a
文件)
-Wl,--verbose
在gcc中添加选项来搜索库(它将传递--verbose
给链接器ld)。例如-ltest
图书馆:attempt to open /lib/libtest.so failed \n attempt to open /lib/libtest.a failed \n attempt to open /usr/lib/libtest.so failed \n attempt to open /usr/lib/libtest.a failed \n
。链接器尝试先打开.so
,然后再尝试打开.a
。它在库搜索目录的每个目录中完成。