我已经花费了无数个小时来解决这个问题,利用Google搜索和其他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
错误的“编辑”部分是对我要链接的静态库的引用。
这是我从网上的许多建议中尝试过的。其中每一个都被不止一次地提出,没有任何解释,这使我相信没有人完全理解这个问题:
“切勿使用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 UILocalizedIndexedCollation:NSObject。”
另一个项目使用相同的目标设置编译得很好,这真的让我质疑我的理智。我可以处理一个损坏的XCode项目吗?
如果有人知道实际发生了什么并有参考或不介意解释,我会非常感激。
干杯!
答案 0 :(得分:4)
ARMv7和ARMv6之间的VFP以各种方式不同。在ARMv7中,通常最好使用NEON。问题是您的静态库依赖于ARMv6中的VFP - 您需要在ARMv7上编译库或将整个应用程序保留在ARMv6中。
恢复到GCC 4.0很愚蠢 - 除非Apple向后推送它,否则ARMv7支持基本上不存在。
答案 1 :(得分:1)
我有同样的错误,除了armv6。我通过在静态库和主项目的项目设置中取消选中“Compile for Thumb”来修复它们。
答案 2 :(得分:0)
答案 3 :(得分:0)
就AT_NAME错误而言,其中一个可能性是 检查你是否错过了班级中的@end。
要详细了解AT_NAME错误,请访问以下链接
http://iosdevelopertips.com/xcode/error-syntax-error-before-at_name-token.html