什么是--start-group和--end-group命令行选项?

时间:2011-04-13 15:37:25

标签: gcc linker ld

这些命令行选项的目的是什么?请帮助破译以下命令行的含义:

-Wl,--start-group -lmy_lib -lyour_lib -lhis_lib -Wl,--end-group -ltheir_lib

显然它与链接有关,但GNU手册很安静,究竟是分组的意思。

1 个答案:

答案 0 :(得分:84)

用于解决多个库之间的循环依赖关系(在-(-)之间列出)。

引用Why does the order in which libraries are linked sometimes cause errors in GCC?man ld http://linux.die.net/man/1/ld

  

-( 档案 -)--start-group 档案 --end-group

     

档案应该是档案文件列表。它们可以是显式文件名,也可以是-l选项。

     

重复搜索指定的存档,直到没有创建新的未定义引用。通常,只按命令行中指定的顺序搜索存档一次。如果需要该存档中的符号来解析稍后在命令行中显示的存档中的对象引用的未定义符号,则链接器将无法解析该引用。通过对存档进行分组,可以反复搜索所有存档,直到所有可能的引用都得到解决。

     

使用此选项会产生显着的性能损失。最好只在两个或多个档案之间存在不可避免的循环引用时使用它。

因此,组内的库可以多次搜索新符号,而且不需要像-llib1 -llib2 -llib1

这样的丑陋结构

PS存档基本上是指静态库(*.a文件)