0%

静态库符号重定义处理

在使用静态库时出现重定义问题,不能控制静态库的生成,记录在这种情况下的处理。

multiple definition

出现重定义时,如果源码可控,这种情况下简单,修改源码即可。
当源码不可控时,需要考虑其他办法来处理这种问题。

  • 直接修改
  • 逆向工程

直接修改

使用 UE 打开存在重定义的 .a 文件,将相关的重定义符号修改为其他名字,必须保证修改前后长度一致

逆向工程

nm查看库文件

nm -a libtest.a

解压静态库文件

ar -x libtest.a

此时当前目录存在 .o 文件

反汇编

objdump -D test.o > test.m

修改之后打包

ar -rcs libtest.a *.o

tips

查看库文件有那些目标文件

ar -t libtest.a

查看库文件索引表

ar -s libtest.a