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

静态链接带符号的ELF文件是否可存在两个同名不同属性的符号

静态链接ELF二进制文件同名符号问题解答

带有完整符号信息的静态链接ELF二进制文件中,完全可以存在两个名称完全一致、但属性和指代实体完全不同的符号,常见的可行场景如下:

  • 绑定属性不同的同名符号:最典型的是局部符号和全局/弱符号重名,比如A编译单元定义了静态函数static int calc(int x),对应的是STB_LOCAL类型的局部符号,B编译单元定义了全局函数int calc(int x),对应的是STB_GLOBAL类型的全局符号。静态链接完成后两个符号都会保留在符号表中,分别指向不同的代码段地址,属于完全独立的两个函数实体。
  • 符号类型不同的同名符号:同一个名称可以对应不同的符号类型,比如一个符号是STT_FUNC函数类型,另一个是STT_OBJECT变量类型,只要二者不触发链接器的多重定义报错规则,就可以同时保留在符号表中。
  • 不同作用域的同名局部符号:多个编译单元各自定义的静态变量、静态函数如果重名,静态链接后都会以STB_LOCAL局部符号的身份保留在符号表中,各自对应不同的段地址,属性也可以存在差异。

补充说明:只有同名符号不触发链接器多重定义校验规则时,才会同时出现在最终ELF的符号表中。如果两个同名符号都是全局强符号,链接阶段会直接抛出多重定义错误,无法生成最终的ELF文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 03:30:00