代码之家  ›  专栏  ›  技术社区  ›  Tom

针对armv7时的xcode链接错误

  •  5
  • Tom  · 技术社区  · 14 年前

    我已经花了无数个小时来研究这个问题,利用谷歌搜索和其他堆栈溢出问题都无济于事。

    我有一个iphone/ipad通用应用程序,当目标是armv6时,它似乎编译得很好。但是,当设备是iPad时,我会收到以下警告:

    warning: building for SDK 'Device - iPhone OS 3.2' requires an armv7 architecture.
    

    奇怪的是,尽管有这个警告,这个应用程序在iPad上仍然运行得很好。然而,我确实希望以“正确的方式”做事情,这在本例中意味着什么。当我将目标体系结构切换到ARMV7时,我会得到链接错误:

      "___restore_vfp_d8_d15_regs", referenced from:
         *redacted*
    
      "___save_vfp_d8_d15_regs", referenced from: 
         *redacted*
    
    ld: symbol(s) not found
    
    collect2: ld returned 1 exit status
    

    错误的“修订”部分引用了我试图链接到的静态库。

    这是我从网上的很多建议中尝试的。这些建议中的每一个都被多次提出而没有任何解释,这使我相信没有人完全理解这个问题:

    “不要使用Xcode窗口左上角的下拉菜单来选择目标。相反,在目标配置中将其设置为基本SDK,然后将基本SDK设置为iPhone OS 3.0。将目标设备设置为首选目标(在我的情况下为iPad、iPhone OS 3.2)。

    这会产生错误“找不到-lcrt1.3.1.o的库”

    “确保GCC没有链接到标准库的错误版本。(您必须确保库搜索路径中没有错误的路径。)

    我的库搜索路径已为空,因此这似乎不相关。

    “尝试使用gcc 4.0而不是gcc 4.2进行编译。”

    我在uikit头文件中得到一个语法错误。错误为“at_name”标记前的语法错误。行为“uikit_extern@interface uilocalizedindexcollection:nsObject”。

    另一个项目的编译与 相同的目标设置, 这真的让我怀疑我的理智。我能处理一个损坏的Xcode项目吗?

    如果有人知道正在发生的事情,有参考资料或不介意解释,我会非常感激。

    干杯!

    4 回复  |  直到 11 年前
        1
  •  4
  •   Yann Ramin    14 年前

    armv7和armv6之间的vfp在不同方面有所不同。在ARMV7中,通常最好使用霓虹灯。问题是静态库依赖于ARMV6中的VFP—您要么需要在ARMV7中编译库,要么将整个应用程序保留在ARMV6中。

    恢复到GCC4.0是愚蠢的——ARMV7支持在当时基本上不存在,除非苹果将其恢复原状。

        2
  •  1
  •   reutiman    13 年前

    除了ARMV6,我也有同样的错误。我通过取消选中静态库和主项目的项目设置中的“为拇指编译”来修复它们。

        4
  •  0
  •   Durai Amuthan.H    11 年前

    就名称错误而言,其中一个可能性是 检查你是否错过了课堂上的@end。

    要了解更多关于at_name错误的信息,请访问以下链接

    http://iosdevelopertips.com/xcode/error-syntax-error-before-at_name-token.html