如何防止代码块在ARMv6上编译为胖二进制文件?

时间:2010-12-09 11:54:00

标签: iphone xcode armv6

我有一个配置为armv6和armv7架构编译的iPhone项目。我需要从编译armv6架构中排除一些代码,因为它会导致设备运行时崩溃(错误的指令异常)。

是否有armv6 / armv7编译路径的定义(例如“_DEBUG”)?

2 个答案:

答案 0 :(得分:1)

首先,您不需要阻止它们编译,您需要阻止它们被执行。毕竟,崩溃是在运行时,而不是编译时间。

也就是说,最简单的方法是使用两个代码路径,并根据体系结构编译相应的部分:

#if defined _ARM_ARCH_7
// your armv7 implementation goes here
#elif defined _ARM_ARCH_6
// your armv6 implementation goes here
#elif defined __i386__
// a simulator implementation could go here, if you had one
#else
#error Unknown Architecture!
#endif

答案 1 :(得分:0)

一种解决方法可能是将所有仅限armv6的源收集到子项目中,并将它们编译为静态库,然后将该库链接到胖应用程序。

我们也可以在Xcode中为每个源文件指定其他构建标志,但是我不熟悉语法或者还需要什么来基本上还原已经发出的标志(例如,指定在armv7下编译的标志。)