首页 > 编程学习 > Linux - 使用objcopy命令修改符号的作用域避免同名符号冲突

$ 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


本文链接:https://www.ngui.cc/article/show-701461.html
Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000