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

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

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

显然它与链接有关,但是GNU手册很清楚分组意味着什么。

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

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

-( archives -)--start-group archives --end-group

档案应该是档案文件的列表。 它们可能是显式文件名或-l选项。

指定的档案被重复search,直到没有新的未定义的参考被创build。 通常情况下,按命令行中指定的顺序只search一次。 如果需要该存档中的符号来parsing在命令行中稍后出现的存档中由对象引用的未定义符号,则链接程序将无法parsing该引用。 通过对档案进行分组,他们都被重复search,直到所有可能的参考被解决。

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

因此,组内的库可以多次search新的符号,并且不需要丑陋的构造,如-llib1 -llib2 -llib1

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