-force_load配置framework路径

IOS开发 专栏收录该内容
7 篇文章 0 订阅

今天同时使用两个第三方库时遇到了duplicate symbol错误,调查后发现是在Other linker flags的设置 -all_load 导致的。但是删除该参数后又导致另一个framework 中的UIView 的category失效了。

上网查明得使用force_load + 路径来载入framework。


-force_load $(SRCROOT)/TOYOTA/framework/Debug/UIEMultiAccess.framework

但是还是编译不过:

ld: can't map file, errno=22 file '/Users/Gavin/Documents/UIE项目相关/TOYOTA/TOYOTA/framework/Debug/UIEMultiAccess.framework' for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)


在看老外的网站发现正确的写法应该是

-force_load $(SRCROOT)/TOYOTA/framework/Debug/UIEMultiAccess.framework/UIEMultiAccess


之后,编译通过:)



Targets选项下有Other linker flags的设置,用来填写XCode的链接器参数,如:-ObjC -all_load -force_load等。
Other linker flags设置的值实际上就是ld命令执行时后面所加的参数。

3个常用参数:
-ObjC
:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中
-all_load
:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
-force_load
:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值