$ 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文件修改符号表的作用域,从全局变成本地,链接时就不会发生冲突了。
参考: