首先从静态库中解压 .o 文件
ar -x lib.a
nm查看符号表 找到重复的函数符号名
nm a.o
c和c++的符号表不一样
0000000000000000 T __Z4testv //c++
0000000000000000 T test //c
隐藏符号 相当于加 static
ld -r a.o -unexported_symbol __Z4testv -o c.o; rm a.o; mv c.o a.o //mac 下可使用
objcopy --localize-symbol=_Z4testv a.o
修改符号名称
ld -r a.o -alias __Z4testv test_c -unexported_symbol __Z4testv -o c.o //mac 下可使用
objcopy --redefine-sym _Z4testv=test_a a.o
如果其他 .o文件引用了这个函数 对每一个文件都要执行
find ./ -name "*.o" -exec objcopy --redefine-sym _Z4testv=test_a {} \;
可以给所有函数加前缀
c语言可以 函数改名变成foo_test
c++因为引入了很多系统函数 只能用上面的方法一个一个该
objcopy --prefix-symbols=foo_ a.o
重新生成静态库
ar crs lib.a *.o
Add new comment