Undefined symbols for architecture arm64: "_OBJC_CLASS_$_ShareSDK", referenced from: objc...

相信很多小伙伴遇到了这个报错 引入shareSDK  (转载: https://www.jianshu.com/p/7402d0b948db 作者:夏 夏天的枫_ )

Undefined symbols for architecture arm64:

  "_OBJC_CLASS_$_ShareSDK", referenced from:

      objc-class-ref in AppDelegate.o

ld: symbol(s) not found for architecture arm64

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


图 1-1

这种问题通常都是因为xcode升级,在arm64架构下,找不到定义的错误。 这类错误我总结的就六种,.m 缺失、静态库没导入(不支持arm64 架构,现在基本都支持了,如果不支持更新相关静态库。怎么查看参考文末)、library路径问题、header 文件路径、Valid Architectures 指定错误,连接器参数问题


1.那么首先检查 Architectures 选项 通常情况下,Build Active Architectures Only 在Debug 模式为YES,Release模式为NO。 Valid Architectures 为 arm64 armv7 armv7s 需要你了解的是 只有连接了Active 的调试设备,这个选项才生效,只编译当前设备对应的指令集。如果你没有连接设备,那么这里即使是YES,也不会生效。编译器会按照你的Valid Architectures和Architectures指定的二进制包进行编译。 


图1-2

 2. 向 Link Binary With Libraries 中 添加相应的framework ,向Compile Source 添加你缺失的.m

 3.修改 Other Linker Flags 添加 -ObjC 和 $(inherited),(也可以直接添加缺失的framework 如: -framework "frameworkname" ) 

4. Header Search Path 和Library Search Path 先添加$(inherited),如果编译后,没有出现,就手拖缺失文件的相关路径(如果路径为多层级,选择递归搜索recursive 默认是non-recursive) 

5.最后检查 framework 和.m 有没有 勾选 target membership 。 总之,如果先思考是静态库问题,还是其他文件问题,会节约很多时间。以上总结,以留档备查,也希望可以给别人一些思路。 实例 1: 错误信息中有明显的提示 does not contain bitcode。 所以 直接设置 bitcode 为NO 就可以了 查看.a或.framework 的静态库文件都支持哪些架构, 终端 进入工程根目录 find . -name *.a -exec lipo -info "{}" \ 或者.framework 

图1-3

你可能感兴趣的:(Undefined symbols for architecture arm64: "_OBJC_CLASS_$_ShareSDK", referenced from: objc...)