编译报错symbol(s)|编译报错symbol(s) not found for architecture x86_64

【编译报错symbol(s)|编译报错symbol(s) not found for architecture x86_64】今天拉了公司一个新项目的代码,使用模拟器运行的时候,编译报错,提示项目中的一个动态库缺少x86_64架构

warning: ignoring file /Pods/EZOpenSDK/dist/EZOpenSDK/dynamicSDK/EZOpenSDKFramework.framework/EZOpenSDKFramework, missing required architecture x86_64 ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

我第一个想到的原因是framework打包的时候没有把模拟器对应的架构给合并进去,导致项目只能在真机上运行,但是当时不能进行真机测试进行验证。
  • 定位到报错信息是项目中的一个动态库。想到一个方法就是利用命令查看该动态库支持的架构类型。我cd到报错的动态库然后利用命令 lipo -info XXXframework去查看。发现确实没有支持x86_64架构
  • 解决方式:1,重新生成支持x86_64架构的动态库。2,使用真机测试。
  • 查看动态库或者静态库支持架构的命令
lipo -info xxxxx.a// 查看.a形式的或者 lipo -info xxxxframework// framework形式的

  • 各种架构对应的模拟器或者测试机类型
    armv7,armv7s,arm64都是真机的架构,其中armv7是iPhone4和4s。armv7s是iPhone5和5c,arm64是iPhone5s以及以上的设备。
    模拟器32位处理器测试需要i386架构,模拟器64位处理器测试需要x86_64架构。

    推荐阅读