为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

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

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

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

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


查看完整描述

3 回答

?
波斯汪

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

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

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

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

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

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

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

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


查看完整回答
反对 回复 2019-08-27
?
侃侃无极

注意:我认为GCC首先用于动态库,除非在命令行中传递完整文件名(包括路径和.a后缀)。-llib1会导致GCC尝试首先链接到%.so文件,然后尝试%.a文件。

查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 1824 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信