Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:问题解决方法

原创 2014年01月15日 15:59:15

多个人共同操作同一个项目或拷贝项目时,经常会出现类似这样的问题:

Undefined symbols for architecture i386:

"_OBJC_CLASS_$_xx文件名", referenced from:




下面是可能导致这类问题出现的原因及修改:

1.相关工程文件未导入





你可以直接在这里+进来,也可以在左边工程目录中把文件全部重新导人一遍(多人操作工程时,一般这种解决办法)



2..framework文件未导入





把xx文件库+进来,本问题"_OBJC_CLASS_$_ASIdentifierManager", 就是因为AdSupport.Framework类库未加



3.文件路径缺失




检查是否某些文件路径未加入进来或者写错了


4.可能是找不到对应的编译包

把libc++库导入就解决了





工程编译报出:Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:错误,问题大致是由于上面这几种情况,把各个方面检查下基本就ok了。


---------------------------分割线-----------------------------------

ps1:

这里有个其他的情况及其处理方法:

Undefined symbols for architecture armv7:
"cocos2d::CCDictionary::removeObjectForKey(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
tolua_Cocos2d_CCDictionary_removeObjectForKey00(lua_State*) in liblua.a(LuaCocos2d.o)
tolua_Cocos2dx_ActionTimeline_clearFrameEventCallFunc00(lua_State*) in liblua.a(lua_cocos2dx_cocostudio_manual.o)
cocostudio::timeline::ActionTimelineCache::removeAction(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libextensions.a(CCActionTimelineCache.o)
cocos2d::extension::CCArmature::removeBone(cocos2d::extension::CCBone*, bool) in libextensions.a(CCArmature.o)
cocos2d::extension::CCArmatureDataManager::removeArmatureData(char const*) in libextensions.a(CCArmatureDataManager.o)
cocos2d::extension::CCArmatureDataManager::removeAnimationData(char const*) in libextensions.a(CCArmatureDataManager.o)
cocos2d::extension::CCArmatureDataManager::removeTextureData(char const*) in libextensions.a(CCArmatureDataManager.o)
...
"non-virtual thunk to cocos2d::CCTextFieldTTF::getContentText()", referenced from:
vtable for cocos2d::ui::UICCTextField in libextensions.a(UITextField.o)
"cocos2d::CCDictionary::valueForKey(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:

这个也是比较多出现的问题,找不到所要的符号。但是其实我的.a静态库是存在的,并且也包含了

解决方案:

1. 将游戏项目的 Deployment Target 改成7.0以下

2. 将cocos2dx重新编译一遍, Build Settings->Apple LLVM *.0 -Language -C++  按下面配置

 

其他cocosDenshion和extensions也按这个配置

然后该问题解决


---------------------------分割线-----------------------------------

ps2:

https://my.oschina.net/ioslighter/blog/363211?fromerr=vcwQiVOs

在这里做个总结吧

可能会遇到这几种错误:
Undefined symbols for architecture armv7
Undefined symbols for architecture armv7s
Undefined symbols for architecture arm64
Undefined symbols for architecture i386
Undefined symbols for architecture x86_64

错误原因分析
1、大部分情况下是忘记添加了某个系统framework或dylib吧,比如你在项目中使用了sqlite3,但是没有添加libsqlite3.dylib,就会出现这个问题。解决办法是增加对应的framework或dylib。
2、如果是在C++里调用C函数,检查是否有添加extern "C",这可以通过观察错误提示中的函数名形式来决定,如果是C函数而以C ++的方式调用就需要添加extern "C"。
3、如果是把其它工程的xcodeproj文件加入到当前项目中,检查Build Phases中的Target Dependencies有没有添加依赖,以及General中的Linked Frameworks and Libraries有没有添加相关的.a文件。
4、如果添加.a文件编译无错而添加xcodeproj文件编译出错可参考3
5、如果添加.a文件编译出错,首先检查其对应的头文件是否添加正确,或者在Build Setting中有没有添加对应的Header Search Path路径;其次检查.a文件的c++编译选项与当前项目的c++编译选项是否一致;最后检查.a文件与当前项目的CPU架构信息是否一致
6、如果是extern变量报这个错误,要检查extern变量有没有在其它地方声明,如果没有则加上;如果外部变量在静态库中,可根据5检查引用头文件或头文件搜索路径是否正确;如果头文件无问题,就需要检查静态库与与当前项目的CPU架构信息是否一致
7、如果是使用了静态库,真机Debug测试时正常,而在执行for iOS Device测试时报这个错误,很可能是因为静态库支持的架构不全。出现这种情况是Build Setting中的Build Active Architecture Only在Debug下设为Yes,从而使得真机Debug测试正常。

8、如果只有@interface,没有@implementation也会导致这个错误

检查静态库的CPU架构支持命令
lipo -info xxxxx.a 

找出不支持arm64的静态库 
find . -name *.a -exec lipo -info "{}" \;

在@end处提示expected }错误解决
问题很明显是}匹配出现问题了。如果代码少很好找,如果代码很多怎么缩小查找范围呢?一般出现这个问题时伴随另一个错误:在某个函数定义处提示"Use of undeclared identifire 'someMethod'”,那么就是在此函数定义之前的地方少了一个},导致编译器误把函数定义当成函数调用了。

Undefined symbols for architecture i386: "_OBJC_CLASS_$_XX" 错误解决方法

出现Undefined symbols for architecture i386: "_OBJC_CLASS_$_XX"的错误,原因通常在于无法识别的标记所在的类文件没有被加入到Compile ...
  • u010962810
  • u010962810
  • 2014-03-20 14:10:44
  • 3455

Undefined symbols for architecture i386或者armv7: “_OBJC_CLASS_$_XXX

Undefined symbols for architecture i386: “_OBJC_CLASS_$_XXX”, referenced from: objc-class-ref in ...
  • kaizi318
  • kaizi318
  • 2013-08-26 20:22:56
  • 23046

Undefined symbols for architecture arm64 "_OBJC_CLASS_$_FBSession", referenced from

今天用xcode动态分析项目找泄露
  • c806755614
  • c806755614
  • 2014-04-16 21:37:12
  • 5593

Undefined symbols for architecture armv7s:

初做IOS,从svn检出的项目,
  • larry12
  • larry12
  • 2014-09-11 18:07:57
  • 1268

编译报错:Undefined symbols for architecture arm64: "_OBJC_CLASS_$_类名", referenced from

报错: Undefined symbols for architecture arm64: “_OBJC_CLASS_$_类名”, referenced from : Objc-class-ref...
  • Cituses
  • Cituses
  • 2016-11-08 11:46:15
  • 1948

错误总结:Undefined symbols for architecture

Undefined symbols for architecture 错误总结
  • wangyanchang21
  • wangyanchang21
  • 2016-05-16 15:09:51
  • 3825

xcode 8在模拟器上运行报错Undefined symbols for architecture i386:

昨天升级了xcode8,原有的项目各种报错啊。其中这个错误 只是在模拟器上不行 ,真机上是可以的。 集成友盟社交化分享组件或者sharesdk并且在模拟器上编译时报错: Undefined s...
  • shuqianwin
  • shuqianwin
  • 2016-09-24 15:29:25
  • 1806

"_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from: objc-class-ref in libWeChatSDK.a(MTA

集成微信支付SDK报错:  "_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from:       objc-class-ref in libWe...
  • iOS_Pop
  • iOS_Pop
  • 2016-01-08 23:22:11
  • 1777

error:"_OBJC_CLASS_$_XXX", referenced from: objc-class-ref in XXX.o

Undefined symbols for architecture x86_64: “OBJC_CLASS$_TodayViewController”, referenced from: ...
  • ReadyFlyStone
  • ReadyFlyStone
  • 2017-07-03 11:55:11
  • 1238

彻底解决iOS项目中 "_OBJC_CLASS_$_XXXService", referenced from: 的类似问题

苹果在2014年10月20号发布了一条消息:从明年的二月一号开始,提交到App Store的应用必须支持64-bit。但是对于很多迭代周期比较长的项目难免在支持64位的过程中出现各种各样的问题,本人在...
  • niepeng109
  • niepeng109
  • 2015-06-08 16:13:18
  • 69068
收藏助手
不良信息举报
您举报文章:Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:问题解决方法
举报原因:
原因补充:

(最多只允许输入30个字)