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

发布于 2024-11-01 05:53:13 字数 176 浏览 0 评论 0原文

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

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

显然它与链接有关,但 GNU 手册并没有说明分组的确切含义。

What is the purpose of those command line options? Please help to decipher the meaning of the following command line:

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

Apparently it has something to do with linking, but the GNU manual is quiet what exactly grouping means.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤独患者 2024-11-08 05:53:13

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

引用 为什么链接库的顺序有时会导致 GCC 中出现错误? 或 <代码>man ld http://linux.die.net/man/1/ld

-( 存档 -)--start-group 存档 --end-group

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

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

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

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

PS 存档基本上意味着静态库(*.a< /代码> 文件)

It is for resolving circular dependences between several libraries (listed between -( and -)).

Citing Why does the order in which libraries are linked sometimes cause errors in GCC? or 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.

So, libraries inside the group can be searched for new symbols several time, and you need no ugly constructs like -llib1 -llib2 -llib1

PS archive means basically a static library (*.a files)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文