Linux - 使用objcopy命令修改符号的作用域避免同名符号冲突

本文介绍了如何通过objcopy工具修改ELF文件中符号的作用域,以解决程序构建时因两个库中存在相同符号导致的冲突。通过--localize-symbol将全局符号改为局部,或用--globalize-symbol将局部符号改回全局。这一方法在处理链接冲突时非常实用,特别是当必须同时链接两个有冲突符号的库时。
摘要由CSDN通过智能技术生成

$ objcopy --localize-symbol=SYMBOL_NAME input.o output.o

$ objcopy --globalize-symbol=SYMBOL_NAME input.o output.o

可以加等号,也可以不加等号:

objcopy --localize-symbol SYMBOL_NAME input.o output.o

objcopy --globalize-symbol SYMBOL_NAME input.o output.o

SYMBOL_NAME是符号名字,比如某个函数名称 myfunc。

input.o是编译出来的obj文件,output.o是新生成的obj文件。

使用--localize-symbol选项,将一个符号从全局作用域改成局部作用域。

使用--globalize-symbol选项,将一个符号从局部作用域改成全局作用域。

使用nm命令查看obj文件的符号,符号类型字符,大写T表示全局作用域,小写t表示局部作用域。

之所以要使用这个功能,是因为有个程序构建时要链接两个库,里面有重复而冲突的符号,我只好把其中一个库里的obj文件修改符号表的作用域,从全局变成本地,链接时就不会发生冲突了。

参考:

Change local symbol to global in ELF – Hev's Blog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值