我已经花费了无数个小时来解决这个问题,使用谷歌搜索和其他 Stack Overflow 的问题都没有什么结果。
我有一个 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
错误中的“redacted”部分是我尝试链接的静态库的引用。
这里是我从许多建议中尝试过的东西。每一个建议都被建议了不止一次,而没有任何解释,这让我相信没有人真正理解这个问题:
“永远不要使用 XCode 窗口左上角的下拉菜单选择目标。相反,将其设置为 Base SDK,然后在目标配置中将 Base SDK 设置为 iPhone OS 3.0。将目标设备设置为您首选的目标(iPad,在我的情况下为 iPhone OS 3.2)。”
这会导致错误“Library not found for -lcrt1.3.1.o”。
“确保 GCC 没有链接到错误版本的标准库。 (您必须确保 LIBRARY_SEARCH_PATH 中没有错误的路径。)”
我的 LIBRARY_SEARCH_PATH 已经为空,所以这似乎与此问题无关。
“尝试使用 GCC 4.0 而不是 GCC 4.2。”
我在一个 UIKit 的头文件中得到了一个语法错误。 错误是“Syntax error before 'AT_NAME' token.”。该行是“UIKIT_EXTERN @interface UILocalizedIndexedCollation : NSObject.”
另一个项目使用相同的目标设置编译得非常好,这让我真的开始怀疑我的理智。我是不是遇到了一个损坏的 XCode 项目?
如果有人知道实际发生了什么,并且有参考或愿意解释一下,我将非常感激。
干杯!