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

pic*_*c11 75 linker gcc ld

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

-Wl,--start-group -lmy_lib -lyour_lib -lhis_lib -Wl,--end-group -ltheir_lib
Run Code Online (Sandbox Code Playgroud)

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

osg*_*sgx 89

它用于解决几个库之间的循环依赖关系(在-(和之间列出-)).

引用为什么链接库的顺序有时会导致GCC错误?man ld http://linux.die.net/man/1/ld

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

档案应该是一个存档文件的列表.它们可以是显式文件名,也可以是-l选项.

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

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

因此,组中的库可以多次搜索新符号,并且您不需要像丑陋的构造 -llib1 -llib2 -llib1

PS归档基本上意味着静态库(*.a文件)

  • 对不起,我终于意识到"搜索两次"是不够的. (8认同)