这些命令行选项的用途是什么?请帮忙解读以下命令行的含义:
-Wl,--start-group -lmy_lib -lyour_lib -lhis_lib -Wl,--end-group -ltheir_lib
显然它与链接有关,但 GNU 手册并没有明确说明分组的确切含义。
最佳答案
它用于解决多个库之间的循环依赖(在 -(
和 -)
之间列出)。
引用Why does the order in which libraries are linked sometimes cause errors in GCC?或 man ld
http://linux.die.net/man/1/ld
-(
archives-)
or--start-group
archives--end-group
The archives should be a list of archive files. They may be either explicit file names, or -l options.
The specified archives are searched repeatedly until no new undefined references are created. Normally, an archive is searched only once in the order that it is specified on the command line. If a symbol in that archive is needed to resolve an undefined symbol referred to by an object in an archive that appears later on the command line, the linker would not be able to resolve that reference. By grouping the archives, they all be searched repeatedly until all possible references are resolved.
Using this option has a significant performance cost. It is best to use it only when there are unavoidable circular references between two or more archives.
因此,组内的库可以多次搜索新符号,并且您不需要像 -llib1 -llib2 -llib1
这样的丑陋结构
PS 存档基本上意味着静态库(*.a
文件)
关于gcc - --start-group 和 --end-group 命令行选项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5651869/