Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 264|回复: 0

[默认分类] Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:问题解决方法

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-7 17:27:53 | 显示全部楼层 |阅读模式

    多个人共同操作同一个项目或拷贝项目时,经常会出现类似这样的问题:
    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"”,那么就是在此函数定义之前的地方少了一个},导致编译器误把函数定义当成函数调用了。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-18 16:03 , Processed in 0.356550 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表