搬砖

解决symbol(s) not found for archit

2018-06-07  本文已影响2533人  jzhang

最近更新了项目里面用的帆软报表SDK (这个SDK比较麻烦,里面引用了其他的很多库,包括微信、信鸽等等,并且还不支持cocoapods),在真机调试的果然报错了,而模拟器调试的话就不会报错。还是经典的symbol(s) not found for architecture x64错误。

不要慌,一步一步来。

1、可能是导入的库不支持当前设备的指令集架构

(iPhone的ARM处理器指令集 armv7,armv7s,arm64,Mac处理器的指令集i386,x86_64)
这种情况一般出现在以前64位设备刚出来的时候,很多第三方库只支持32位系统,目前来说一般不会是因为这个原因。不过还是先验证下。


image.png

错报错信息上看,是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静态库里面引用了其他的库而项目里没有导入

仔细看报错信息


image.png

明显分成了2个部分,一部分是NE开头的类名,一部分是_u开头的方法名。所以这里就很简单了,去搜索相应的类或者方法,确定是缺了什么库文件
1、第一个缺少的库


image.png image.png

这个比较好确定,就是缺了NetworkExtension库,导入一下,编译


image.png

果然,上面一部分报错信息不见了。

2、第二个缺少的库


image.png

这个不是很明显,找一个点进去看看,看到了关键信息:


image.png

于是如此这般操作一下:


image.png

编译项目


image.png

完美解决问题。
这个问题很多人遇到都觉得很头疼,这里把比较通用的解决步骤写一下,其实以前大概写过,不过不是很详细,这里再写一下,希望能帮助到一些人。
其他解决方式:解决symbol(s) not found for architecture arm64报错

上一篇 下一篇

猜你喜欢

热点阅读