我已经花了无数小时来解决这个问题,利用Google搜索和其他Stack Overflow问题都无济于事。
我有一个iPhone/iPad通用应用程序,当目标是armv6时似乎可以正常编译。但是,当设备是iPad时,我会收到以下警告:
警告:为SDK“设备-iPhone OS 3.2”构建时需要armv7架构。
奇怪的是,尽管有此警告,该应用程序仍可以在iPad上很好地运行。但是,在这种情况下,我确实想以“正确的方式”做事。将目标体系结构切换到armv7时,出现链接错误:
从以下位置引用的“___restore_vfp_d8_d15_regs”
*已编辑*
“___save_vfp_d8_d15_regs”,引用自:
*已编辑*
ld:找不到符号
collect2:ld返回1退出状态
错误的“已编辑”部分是对我要链接到的静态库的引用。
这是我从许多在线建议中尝试过的方法。这些建议中的每一个都多次提出,没有任何解释,这使我相信没有人完全理解这个问题:
这将产生错误“找不到-lcrt1.3.1.o的库”
我的LIBRARY_SEARCH_PATH已经为空,因此这似乎无关。
我在UIKit头文件中收到语法错误。错误为“'AT_NAME' token 之前的语法错误”。该行是“UIKIT_EXTERN @interface UILocalizedIndexedCollation:NSObject”。
另一个项目使用相同的目标设置进行编译就可以了,这确实使我怀疑自己的理智。我可以处理一个损坏的XCode项目吗?
如果有人知道实际发生的事情并且有引用或不介意解释它,我将非常感激。
干杯!
最佳答案
ARMv7和ARMv6之间的VFP在各种方面有所不同。在ARMv7中,通常最好使用NEON。问题是您的静态库依赖于ARMv6中的VFP-您需要在ARMv7上编译该库,或者将整个应用程序保留在ARMv6上。
恢复到GCC 4.0是愚蠢的-除非苹果向后移植,否则当时基本上不存在ARMv7支持。
关于定位armv7时发生XCode链接错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2804953/