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

如何阻止静态链接GLIBC的.so库导出GLIBC、libstdc++相关符号

解决方案

你可以通过以下几种链接阶段的配置阻止非必要符号导出:

方案1:使用符号版本脚本控制导出范围(最推荐)

这是可控性最高的方案,可以精准控制仅导出你需要对外暴露的接口:

  1. 新建符号规则文件morpher.map,内容如下:
{
  global:
    # 此处填写所有你需要对外暴露的函数/变量名,示例:
    morpher_init;
    morpher_process;
    morpher_destroy;
  local:
    *;
};
  1. 在原链接命令末尾添加参数-Wl,--version-script=morpher.map即可。

该规则会将所有未显式列入global的符号全部标记为隐藏,无论符号来自你自己的代码还是静态链接的libstdc++、libgcc库,完全覆盖编译阶段visibility配置的生效范围。


方案2:使用exclude-libs参数隐藏所有静态库符号

如果不想手动罗列导出接口,可以直接让链接器隐藏所有来自静态库的符号:
修改你的链接命令,添加-Wl,--exclude-libs=ALL参数:

g++ -shared -o morpher.so -static-libstdc++ -static-libgcc -Wl,-L. \
-Wl,--whole-archive -l:hello.o -l:libmorpher.a -Wl,--no-whole-archive \
-Wl,--exclude-libs=ALL

如果需要仅隐藏特定静态库的符号,可以把ALL替换为库名列表,用冒号分隔,例如-Wl,--exclude-libs=libstdc++.a:libgcc.a


验证效果

修改完成后执行以下命令查看动态导出符号表,确认仅保留你需要的公开接口:

nm -D morpher.so

内容的提问来源于stack exchange,提问作者Sergey Slepov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:21:02