前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Other Linker Flags参数解析和duplicate symbol错误解决方法

Other Linker Flags参数解析和duplicate symbol错误解决方法

原创
作者头像
晨之阴影
修改2022-12-01 11:45:11
9110
修改2022-12-01 11:45:11
举报
文章被收录于专栏:晨光的Code晨光的Code

1.Other Linker Flags参数解析

ObjC

Objc指令会告诉链接器把库中的Objective-C类和Category全部加载进来,但这个指令会加载很多不必要的文件而导致可执行文件变大,如果静态库中有类和category的话需要加入这个flag才能正确编译,但是当静态库中只有分类而没有类的时候,就需要使用-all_load或者-force_load了。

-all_load

-all_load指令会强制链接器把目标文件都加载进来,即使没有objc代码。但是如果使用了不止一个静态库文件,并且不同的库文件里面有相同的目标文件,那么使用这个指令会导致duplicate symbol错误。有两种方法解决 1:用命令行拆包删除重复的目标文件; 2:使用-force_load。

-force_load

这个flag所做的事情跟-all_load其实是一样的,只是-force_load需要指定要进行全部加载的库文件的路径,这样只加载了一个库文件,不影响其余库文件的按需加载。

2. duplicate symbol错误的拆包解决方法

2.1 使用lipo -info查看库中包含的cpu架构代码:

代码语言:shell
复制
lipo -info XXX
Architectures in the fat file: XXX are: armv7 i386 x86\_64 arm64

2.2 使用lipo -thin -output提取不同架构的库文件

代码语言:shell
复制
lipo XXX -thin armv7 -output XXX\_armv7
lipo XXX -thin i386 -output XXX\_i386
lipo XXX -thin x86\_64 -output XXX\_x86\_64
lipo XXX -thin arm64 -output XXX\_arm64

2.3 使用ar -x进行解.o操作,这个命令会把所有.o还原出来,剔除重复符号的.o

代码语言:shell
复制
ar -x XXX\_armv7
rm md5.o

2.4 将.o重新link回去

代码语言:shell
复制
libtool -static -o ../XXX\_armv7 \*.o

2.5 将thin lib合并回fat lib:

代码语言:txt
复制
lipo -create -output XXX XXX\_armv7 XXX\_arm64 XXXt\_x86\_64 XXX\_i386

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Other Linker Flags参数解析
  • 2. duplicate symbol错误的拆包解决方法
    • 2.1 使用lipo -info查看库中包含的cpu架构代码:
      • 2.2 使用lipo -thin -output提取不同架构的库文件
        • 2.3 使用ar -x进行解.o操作,这个命令会把所有.o还原出来,剔除重复符号的.o
          • 2.4 将.o重新link回去
            • 2.5 将thin lib合并回fat lib:
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档