You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Ubuntu的链接器默认使用--as-needed选项?

为什么Ubuntu下GCC默认忽略未被引用的链接库(--as-needed)而Fedora不会?

核心原因:发行版对GCC的默认配置差异

GCC在链接阶段会向ld传递默认参数,Ubuntu发行版主动修改了GCC的默认链接参数,默认添加了--as-needed选项;而Fedora则保持了ld原生的--no-as-needed默认行为——这就是两者表现不同的根本原因。

验证方式

可以通过查看GCC传递给链接器的完整命令行来确认:

  • 在Ubuntu执行:gcc -v test1.c -lsrt,输出的链接命令中会明确包含--as-needed参数
  • 在Fedora执行相同命令,链接命令里不会出现该参数,对应ld原生的默认行为

Ubuntu修改默认的动机

Ubuntu做出这个调整,核心是为了践行最小依赖原则:

  • 减少可执行文件携带的冗余库引用,降低运行时的加载开销
  • 避免因未使用的库更新引发的兼容性问题
  • 符合Debian/Ubuntu生态下精简打包的标准要求

关于man ld文档不一致的问题

Ubuntu的man ld文档没有同步更新这个发行版特有的参数修改,属于文档滞后问题。ld本身的原生默认确实是--no-as-needed,但Ubuntu通过GCC的包装层改变了实际生效的默认行为。

手动切换行为的方法

如果需要在Ubuntu上恢复ld原生默认,可手动添加参数:

gcc test1.c -Wl,--no-as-needed -lsrt

反之,要在Fedora上启用--as-needed,则执行:

gcc test1.c -Wl,--as-needed -lsrt

内容的提问来源于stack exchange,提问作者Thierry Lelegard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:05:17