最近更新了项目里面用的帆软报表SDK (这个SDK比较麻烦,里面引用了其他的很多库,包括微信、信鸽等等,并且还不支持cocoapods),在真机调试的果然报错了,而模拟器调试的话就不会报错。还是经典的symbol(s) not found for architecture x64错误。
不要慌,一步一步来。
1、可能是导入的库不支持当前设备的指令集架构
(iPhone的ARM处理器指令集 armv7,armv7s,arm64,Mac处理器的指令集i386,x86_64)
这种情况一般出现在以前64位设备刚出来的时候,很多第三方库只支持32位系统,目前来说一般不会是因为这个原因。不过还是先验证下。
错报错信息上看,是libSangforSdk.a库文件有问题
# cd进入文件所在目录
cd /Users/Javen/Documents/MyProject/VPN
# 查看信息
lipo -info libSangforSdk.a
输出结果:
Architectures in the fat file: libSangforSdk.a are: armv7 x86_64 arm64
显然这个库是支持arm64的,所以不是因为库文件不支持。
2、可能是libSangforSdk.a静态库里面引用了其他的库而项目里没有导入
仔细看报错信息
明显分成了2个部分,一部分是NE开头的类名,一部分是_u开头的方法名。所以这里就很简单了,去搜索相应的类或者方法,确定是缺了什么库文件
1、第一个缺少的库
这个比较好确定,就是缺了NetworkExtension库,导入一下,编译
果然,上面一部分报错信息不见了。
2、第二个缺少的库
这个不是很明显,找一个点进去看看,看到了关键信息:
于是如此这般操作一下:
编译项目
完美解决问题。
这个问题很多人遇到都觉得很头疼,这里把比较通用的解决步骤写一下,其实以前大概写过,不过不是很详细,这里再写一下,希望能帮助到一些人。
其他解决方式:解决symbol(s) not found for architecture arm64报错