• Undefined symbols for architecture arm64(其cpu架构)


    "_OBJC_CLASS_$_XXX",referenced from: 之类的问题,很多人看到这些很头疼,不知道从何下手去修改。以下是我总结的相关修改办法。如下图

      

        这是一个很明显的在arm64架构下,找不到定义的错误。  这类错误我总结的就六种,.m 缺失、静态库没导入(不支持arm64 架构,现在基本都支持了,如果不支持更新相关静态库。怎么查看参考文末)、library路径问题、header 文件路径、Valid Architectures 指定错误,连接器参数问题

     1.那么首先检查 Architectures 选项

      通常情况下,Build Active Architectures Only  在Debug 模式为YES,Release模式为NO。

            Valid Architectures  为 arm64 armv7 armv7s

      需要你了解的是  只有连接了Active 的调试设备,这个选项才生效,只编译当前设备对应的指令集。如果你没有连接设备,那么这里即使是YES,也不会生效。编译器会按照你的Valid Architectures和Architectures指定的二进制包进行编译。

    具体参考

       armv6 设备: iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch

       armv7 设备: iPhone3GS, iPhone4, iPhone4S

                            iPad, iPad2, iPad3(The New iPad), iPad mini

                            iPod Touch 3G, iPod Touch4

      armv7s设备: iPhone5, iPhone5C, iPad4(iPad with Retina Display)

      arm64 设备: iPhone5S, iPad Air, iPad mini2(iPad mini with Retina Display)  之后出的到X都是arm64的设备了

        2. 向 Link Binary With Libraries 中 添加相应的framework   ,向Compile Source 添加你缺失的.m

        3.修改 Other Linker Flags   添加 -ObjC 和 $(inherited),(也可以直接添加缺失的framework 如:  -framework "frameworkname"

      4. Header Search Path 和Library  Search Path 先添加$(inherited),如果编译后,没有出现,就手拖缺失文件的相关路径(如果路径为多层级,选择递归搜索recursive 默认是non-recursive)

        5.最后检查 framework 和.m 有没有 勾选 target membership 。

      

      总之,如果先思考是静态库问题,还是其他文件问题,会节约很多时间。以上总结,以留档备查,也希望可以给别人一些思路。

      实例 1:      错误信息中有明显的提示  does not contain bitcode。  所以 直接设置 bitcode 为NO 就可以了

     

    附:

       查看.a或.framework 的静态库文件都支持哪些架构, 终端 进入工程根目录 find . -name *.a -exec lipo -info "{}"  或者.framework

  • 相关阅读:
    laravel 博客
    VSSより、指定したファイルを取得するマクロ(パス入り)
    使用SQLPlus连接Oracle实例
    SSH-Struts第四弹:Struts2学习过程中遇到的问题
    SSH-Struts第三弹:传智播客视频教程第一天上午的笔记
    Prim和Kruskal求最小生成树
    tarjan算法求强连通分量
    shutdown TCP 端口445
    Eclipse导出apk
    [模板]tarjan求强连通分量
  • 原文地址:https://www.cnblogs.com/DafaRan/p/8118205.html
Copyright © 2020-2023  润新知