5

我已经花了无数个小时来解决这个问题,利用 Google 搜索和其他 Stack Overflow 问题无济于事。

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

警告:为 SDK 'Device - iPhone OS 3.2' 构建需要 armv7 架构。

奇怪的是,尽管有这个警告,该应用程序仍然在 iPad 上运行良好。但是,我确实想以“正确的方式”做事,这在这种情况下意味着什么。当我将目标架构切换到 armv7 时,出现链接错误:

  “___restore_vfp_d8_d15_regs”,引用自:
     *已编辑*

  “___save_vfp_d8_d15_regs”,引用自:
     *已编辑*

ld:未找到符号

collect2: ld 返回 1 个退出状态

错误的“编辑”部分是对我试图链接的静态库的引用。

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

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

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

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

我的 LIBRARY_SEARCH_PATH 已经是空的,所以这似乎不相关。

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

我在 UIKit 头文件中收到语法错误。错误是“'AT_NAME' 标记之前的语法错误。” 该行是“UIKIT_EXTERN @interface UILocalizedIndexedCollat​​ion:NSObject”。

另一个项目使用相同的目标设置编译得很好,这真的让我质疑我的理智。我可以处理损坏的 XCode 项目吗?

如果有人知道实际发生了什么并且有参考或不介意解释它,我将非常感激。

干杯!

4

4 回答 4

4

ARMv7 和 ARMv6 之间的 VFP 在很多方面有所不同。在 ARMv7 中,通常最好使用 NEON。问题是您的静态库依赖于 ARMv6 中的 VFP——您要么需要在 ARMv7 上编译库,要么将整个应用程序保留在 ARMv6 上。

恢复到 GCC 4.0 是愚蠢的——当时基本上不存在 ARMv7 支持,除非 Apple 支持它。

于 2010-05-10T17:50:48.547 回答
1

我有同样的错误,除了它是针对 armv6 的。我通过在静态库和主项目的项目设置中取消选中“Compile for Thumb”来修复它们。

于 2011-05-11T14:23:57.197 回答
0

尝试这样做http://groups.google.com/group/three20/browse_thread/thread/31ddbc047aa1b9ae/c4c5827ab0c7a76f

于 2010-09-30T07:48:25.090 回答
0

就 AT_NAME 错误而言,其中一种可能性是检查您是否错过了课程中的 @end。

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

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

于 2013-08-02T04:31:30.283 回答