【iOS-bug】- Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_XCBankChooseItemCell"

【 Bug - architecture x86_64 】


今天碰到了一个bug,代码提示:

Undefined symbols for architecture x86_64:

"_OBJC_CLASS_$_XCBankChooseItemCell", referenced from:

objc-class-ref in XCFundBanksTableViewController.o

ld: symbol(s) not found for architecture x86_64

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

截屏如下:

以前也总碰到bug,觉得没难改的,不过今天这个真的是弄了好久,问了好多人,都没有搞定。后来在 机智的我 的头儿轻轻的指导下,瞬间搞定。


【 Bug详情 】 


【 问题来源 】

1.接手工程,修改bug,需要在工程中自定义一个cell

2.然后我加了一个名为“ XCBankChooseItemCell ”继承自UItableViewCell的类


3.于是,直接产生了如题错误,程序直接运行不了


【 问题解决过程 】

1.在stack flow上,查到了这个问题的解决方案,地址如下

http://stackoverflow.com/questions/31271572/undefined-symbols-for-architecture-x86-64-objc-class-todoitem

(1)里面解释的答案意思是:你建的文件,没有在那个工程里面,或者是没有在Target中编译

(2)给出的建议是:确保“ XCBankChooseItemCell 类”没有丢失,如果没丢失,把“ XCBankChooseItemCell 类”添加到Target中编译

2.刚开始看,没懂,我以为是要把“ XCBankChooseItemCell 类”,在Build Phases->Compile Sources中把 .m 文件添加到编译中,结果还是不行,后来经过我头儿指点,才理解的,就是第一条的那个意思


【 问题解决】

需要修改一个地方

1.原来这样:

2.改成这样:

就OK了

解释下:新建的“ XCBankChooseItemCell ”类默认不参加Target编译,反而参加Framework702的编译中了,导致的工程无法运行。


【 最后总结下 】 


architecture x86_64 类似问题可能产生的原因

1.新建类,未参加 Target 编译(与我的问题一模一样) 

2.检查 targets --> build phases --> Compile Sources 中是否缺少 .m 文件

3.检查 targets --> build phases --> link binary with libraries 是否缺少依赖库

4.有些三方库可能需要导入libz.dylib

5.检查库文件导入的路径不对或不存在,targets --> building setting --> search paths路径

6.检查三方库是否重复导入

6.-fno-objc-arc 的问题,检查下文件编译环境


最后说明下,bug的解决要具体情况具体分析,随机应变。

(如有错误,欢迎各位指正!  ^ ^ )

 —————————————  【 纪宝宝 】 —————————————

推荐阅读更多精彩内容