iOS 中处理的编译链接错误

在项目运行时,可能会出现一些编译错误.

-L 错误

如:

directory not found for option '-L/Users/xxx/Library/Developer/Xcode/DeriveData

紧接其后的是未发现一些第三方框架,如:Masonry等的路径.
这是在使用 Cocoa pods 后,编译产生的第三方库的问题.

  • 首先,你需要确定你打开的是 xxx.xcworkspace 文件而不是 xcodeproj文件
  • 其次,你报的错是- L 说明是出现Library 出现了问题. 你需要选中 target --> buildSetting ,搜索 lib,找到 Library Search Paths
  • 这里存放外部引用的库的搜索路径,通常是 $(inherits),其后是一些你导入的第三方库的地址;将后面的库文件地址删除,保留$(inherits),然后编译
  • 如果,上面编译不通过,stackoverflow 上说,可以尝试将$(SRCROOT)替换 $(inherits),不过这个我没有成功,好像是适用于 xcode 5
  • 最后的办法,重置所有的第三方库文件.删除pod 文件夹,pod 的 file,lock 文件,进入项目,删除红色部分;进入 target --> build phases 中删除pod 相关的 phases. 然后重建pod.

指令集编译错误

  • 现在的 xcode 中通常使用 x86,armv7,armv7s 3中编译指令,在某些时候也会出现编译错误,比如升级 xcode8 后,导入其他人的项目.有些确实是 xcode 自身的 bug,我们无法处理.stackoverflow 也无法找到答案
  1. 关闭bitcode:进入 target --> build setting -->搜索 bitcode -->build options ,关闭 bitcode
  2. 无法处理的话,将编译指令兼容: targt --> buildsetings,把 build Archive Architetures only 设置为 YES
  3. 导入的包不对,将需要的包,如地图,推送的包重新导入
  4. 如果打包的时候出现 armv7的错误,或者 armv7s 的架构错误,可以尝试清除打包文件,重新登录开发者帐号
  5. 最后的办法,出现 x86的架构错误,不用模拟器,直接手机运行调试.如果打包出现 armv7错误,进入 build setting --> 搜索 arm --> Valid Architectures 中 ,删除 armv7.当然,删除后会导致项目不适配 iPhone4s 及以下的手机. 如果上述方法不行,仍然报 armv7s,你去其他地方找找,有答案请评论
  • Undefined symbols for architecture arm64:"OBJC_CLASS$_xxx", referenced from: someFile
    ld: symbol(s) not found for architecture arm64
    编译的时候产生 arm64 编译指令集错误,可能是导入的库文件或者新的类文件引用了某个项目中已有的第三方库文件
    1 .对于新加入的第三方库文件:可以使用lipo -info 路径/xxx.a命令在终端查看这个库适用那些编译指令集

  • Undefined symbols for architecture arm64: "OBJC_CLASS$_XXX", referenced from: objc-class-ref in RouteSearchVC.o ";是指在程序编译的时候,RouteSearchVC 类的编译文件在 arm64的指令集中,xxx 类出现了错误.
    一般在将某个类文件导入当前项目中回出现这种错误,解决办法:target ->build phases -> compile sources,在这里面将么有导入的文件重新添加

参考地址:解决OBJC_CLASS$_XXX的问题

  1. 如果项目中导入某个类简单的类文件,出现 arm64 报错,先检查build setting 中ArchitecturesValid Architectures,是否有错误,没有错,就按图修改Other Linker Flags:

If your Architectures and Valid Architectures are all right, you may check whether you have added $(inherited), which will add linker flags generated in pods, to Other Linker Flags as below:

iOS 中处理的编译链接错误_第1张图片
添加$(inherited) .png

你可能感兴趣的:(iOS 中处理的编译链接错误)