Undefined symbols for architecture x86_64

一、错误提示:

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 -> +

    Link Binary With Libraries

3、添加文件错误:
  • 环境:
    在你将文件添加到项目中时,未选择 Add to targets

    add file

  • 原因:
    在你将文件添加到项目中时,未选择 Add to targets 进行添加。

  • 解决方法:
    为正确的目标打开 Build Phases,展开 Compile Sources 并添加缺少的 .m文件,步骤如下:
    TARGETS -> Build Phases -> Compile Sources -> add the missing .m class -> Build and Run

    add the missin .m class

翻译出处:Resolving symbol(s) not found for architecture x86_64

推荐阅读更多精彩内容