zl程序教程

您现在的位置是:首页 >  系统

当前栏目

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

Linux命令 修改 避免 符号 冲突 作用域 同名
2023-09-11 14:22:09 时间

$ 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