静态库引入引起的错误解决方案,ld: warning: ignoring file ”…/XXX.a”, file was built for archive which is not the architecture being linked (armv7): “…/XXX.a” Undefined symbols for architecture armv7: "_OBJC_CLASS_$

想目中不免会引入一些静态库,可是有时加入'.a'文件后编译便会报以下错误

ld: warning: ignoring file ”…/XXX.a”, file was built for archive which is not the architecture being linked (armv7): “…/XXX.a”
Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_XXX", referenced from:
      objc-class-ref in XXX.o

百度得到的第一页的大部分答案是找不到路径或'.a'文件缺失

参考:http://www.cocoachina.com/bbs/read.php?tid-247940.html 

http://blog.csdn.net/kaizi318/article/details/10362673

http://www.cnblogs.com/zxykit/p/5165857.html

http://blog.csdn.net/bindu27227/article/details/23706369

但是这并不能解决这次遇到的问题

这次的文件导入后出现一个奇怪的现象,模拟器和iOS 9.3.1的真机调试都会报上面出现的错误,但是iOS 10.2.1却可以正常运行。

问题大体可以定位到以下几处:

1.工程没有找到导入的'.a'的路径。

  解决:查看Library Search Paths看看是否包含了相应的静态库的路径(参考http://blog.csdn.net/u012703795/article/details/24464837)。

2.导入的'.a'文件有问题

  解决:查看'.a'文件支持的arm指令集(参考:http://stackoverflow.com/questions/34844932/error-ld-warning-ignoring-file-libfile01-a-file-was-built-for-archive-which

和 http://blog.csdn.net/lvxiangan/article/details/42486731)

经过上面的操作后发现这次导入的'.a'文件仅支持arm64,这样的'.a'文件也是醉醉的

于是将Valid Architectures 改为仅有arm64,再次编译运行。。。

这次该好了吧,然而并没有

lb ‘/…/XXX.a’ does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

解决:参考http://blog.csdn.net/zhyl8157121/article/details/48528831

再次运行,OK

原文地址:https://www.cnblogs.com/PaulpauL/p/6428743.html