一、错误提示:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_Crypto", referenced from:
__TMaCSo6Crypto in AuthHelper.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
大致意思是在 AuthHelper
里面有一些无法识别的符号。
二、常见原因和解决方法:
1、缺少静态库:
环境:
在模拟器上报错但在真机上能运行成功,而且报的错误来自于第三方库。原因:
architecture x86_64
是指模拟器的架构,意思就是Crypto
变量在模拟器架构里没有找到。
静态库也分不同架构的,可能你项目里使用的这个库只用了真机版本的(该静态库不支持在模拟器下编译),没有使用模拟器版本的,所以模拟器跑的时候没有找到对应的库,这些需要的变量也就缺失了。解决方法:
把模拟器版的库也下下来,然后跟真机版的合成一个静态库,这样就通用了。
PS:有些第三方库就很蛋疼,只有真机版本的,所以就只能真机调试了。
2、缺少库或框架:
环境:
导入某一个类,在模拟器真机都运行报错。原因:
可能这个类所属的库或框架(这个类引用的库或框架)没有被添加到项目中。
比如你在项目中使用了sqlite3
,但是没有添加libsqlite3.dylib
。-
解决方法:
添加这个类所属的库或者框架(这个类引用的库或框架),步骤如下:
TARGETS
->Build Phases
->Link Binary With Libraries
->+
3、添加文件错误:
-
环境:
在你将文件添加到项目中时,未选择Add to targets
。
原因:
在你将文件添加到项目中时,未选择Add to targets
进行添加。-
解决方法:
为正确的目标打开Build Phases
,展开Compile Sources
并添加缺少的.m文件
,步骤如下:
TARGETS
->Build Phases
->Compile Sources
->add the missing .m class
->Build and Run