Undefined Symbols for Architecture arm64/amrv7或者Symbols not found in Architecture arm64以及iOS的SDK瘦身问题

我刚刚作为19届毕业生进入公司实习,给我的第一个项目就是SDK瘦身。期初我是不知道该如何下手的,网上查找资料后做了一些基础的配置,后来就接触到了Strip Debug Symbols During Copy,为什么要设置这个呢?因为工程在编译的时候回产生调试符号,一些不必要的符号呢就可以剥离掉,所以设置这个选项为YES,但是要注意的是必须要把Deployment Postprocessing这个设置成YES才会生效。这样就能把调试符号剥离掉,减小SDk的体积。

但是还有一个选项,是Symbols Hidden by Default,这个选项设置成yes或者no对包大小没有一点影响,起初我也不懂是怎么回事,明明是隐藏掉调试符号了,为什么对体积没影响呢,于是google了很久这个选项的作用,才知道这个选项是把符号表里的符号全部设置成为pricvate extern,这个private extern不注意使用又会出现很多问题。

就当我把这些设置好后,我将这个SDK拿到另一个工程里面使用,编译的时候出现了一段醒目的红色,肯定是报错了,报的就是Symbols not found in Architecture arm64,为什么呢?我尝试过把SDK全部重新删掉重新导入,还试过将原来SDK的工程配置文件中的Architecture添加arm64和armv7再编译再将SDK导入到新工程等等等等,能想到的办法我都用过,正当我焦头烂额的时候,我把我SDK的工程用git回滚了,编译生成.framework文件再导入,成功通过编译,为什么呢?于是我将两个工程配置仔细对比,发现问题就出现在Symbols Hidden by Default,于是我又开始Google,发现这个选项把符号全部设成private extern 之后别人就读取不到里面的信息啦,恍然大悟,于是改成NO,在将其他剥离符号的配置一改,导入到新工程里编译通过。

如果Symbols Hidden by Default设置成NO的还是会出现这个错误的,好好想一下你的SDK到底能不能被你的工程所读取到呢?

所以这点小事情都能被困住这么久,说明了我还是有很多需要学的地方啊!如果我说的有什么错误,请加我微信Fyair000~谢谢你们啦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值