美文网首页
静态库冲突解决

静态库冲突解决

作者: liboxiang | 来源:发表于2017-11-30 17:33 被阅读24次

一、设置other linker flags参数

E31F270E-BADD-43AF-BBB4-E0C7390E681E.png
other linker flags作用

C代码到可执行文件经历的步骤是:

源代码 > 预处理器 > 编译器 > 汇编器 > 机器码 > 链接器 > 可执行文件

在最后一步需要把.o文件和C语言运行库链接起来,这时候需要用到ld命令。源文件经过一系列处理以后,会生成对应的.obj文件,然后一个项目必然会有许多.obj文件,并且这些文件之间会有各种各样的联系,例如函数调用。链接器做的事就是把这些目标文件和所用的一些库链接在一起形成一个完整的可执行文件
通过这个流程可知为什么在编译的过程中没事而在运行的时候就会报错了. Other Linker Flags其实就是链接器工作时除了默认参数外的其他参数。

  • -ObjC

一般这个参数足够解决前面提到的问题,这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。这样编译之后的app会变大,因为加载了很多不必要的文件而导致可执行文件变大。但是如果静态库中有类和category的话只有加入这个flag才行,但是Objc也不是万能的,当静态库中只有分类而没有类的时候,Objc就失效了,这就需要使用-all_load或者-force_load了。

  • -all_load

-all_load会强制链接器把目标文件都加载进来,即使没有objc代码。但是这个参数也有一个弊端,那就是你使用了不止一个静态库文件,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件 这里会有两种方法解决 1:用命令行就行拆包. 2:就是用下面的这个参数

  • -force_load

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

二、用拆分类的方法

相关文章

  • 静态库冲突解决

    一、设置other linker flags参数 other linker flags作用 C代码到可执行文件经历...

  • Git(二)

    一. 静态库符号冲突解决 1.1 链接同名静态库会不会冲突? 首先打开第一份工程LGTestApp,导入了AFNe...

  • 解决iOS静态库文件冲突

    iOS 静态库冲突 两个不同的.o 文件冲突 ,静态库分离

  • 解决静态库冲突问题

    最近在写公司的智能家居项目时碰到静态库冲突问题,我和公司另外一个同事折腾了几天终于弄出来了, 太坑人..........

  • iOS 静态库.a冲突解决

    以前我是有过专门做SDK的经验,所以像这种sdk报错遇到的不少,如图有价值也很明显的问题点在于: 这种问题一般都是...

  • 静态库.a文件冲突解决

    项目里文件liblibWeex.a库引用了SDWebImage的文件,但是项目其他库也有使用到该库,冲突了! 解决...

  • 解决静态库冲突问题

    问题 集成项目SDK的时候用到公司的两个静态库,在没有添加other link flags -ObjC之前,编译运...

  • 静态库冲突 & Git (20)

    静态库冲突 & Git (20) 静态库冲突 冲突本质 -Objc 以及 -all_load 都没有问题, 都可以...

  • lib(a)导致的duplicate symbol的问题

    链接: IOS lib(.a)库冲突解决办法 iOS 两个静态库存在同名文件冲突解决方案 说明 首先你要确定是这个...

  • iOS 解决.a 静态库冲突问题

    今天碰到恶心的libSBJSON.a(千度公司出品) 和ArcGIS 冲突了和它们聊过之后它们决定不改。那只有自己...

网友评论

      本文标题:静态库冲突解决

      本文链接:https://www.haomeiwen.com/subject/gibebxtx.html