【 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上,查到了这个问题的解决方案,地址如下
(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的解决要具体情况具体分析,随机应变。
(如有错误,欢迎各位指正! ^ ^ )
————————————— 【 纪宝宝 】 —————————————