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

能否通过GNU ld版本脚本仅暴露指定版本LIB_0的符号?

仅暴露指定版本符号的GNU LD版本脚本配置

完全可以通过调整GNU LD的版本脚本,实现只暴露与LIB_0关联的符号、忽略LIB_1符号的需求,具体配置方式如下:

版本脚本示例

创建如下版本脚本(比如命名为restrict_version.lds):

LIB_0 {
    global:
        // 明确列出所有需要对外暴露的LIB_0版本符号
        func_old;  // 替换为实际的LIB_0符号名
    local:
        *;  // 所有未明确声明为global的符号均设为局部,不对外暴露
};

// 即使LIB_1在代码中存在关联符号,也不将其设为全局暴露
LIB_1 {
    global:
        // 此处不列出任何符号
    local:
        *;
};

关键配置说明

  • LIB_0段:通过global关键字明确指定需要对外暴露的符号,再用local: *兜底,确保所有未被显式声明的符号(包括LIB_1关联的符号)都被设为局部符号,不会出现在动态符号表中。
  • LIB_1段:即使保留LIB_1的版本定义,也不在其global段添加任何符号,彻底阻止该版本的符号对外暴露;如果不需要保留LIB_1的版本信息,也可以直接删除整个LIB_1段。

编译链接命令

编译共享库时,通过-Wl,--version-script参数指定版本脚本:

gcc -shared -fPIC your_source_code.c -Wl,--version-script=restrict_version.lds -o libyourlib.so

验证效果可以用nm -D libyourlib.so命令查看动态符号表,只会看到LIB_0关联的符号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:12:33