2010-12-09 52 views
1

我有一个iPhone项目配置为armv6和armv7架构编译。我需要从编译armv6体系结构中排除一些代码,因为它会导致设备运行时崩溃(坏的指令异常)。如何防止在ARMv6上为胖二进制编译代码块?

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

+0

好问题。对于只能在ARMv7设备上运行的代码路径也是有用的。 – 2010-12-09 15:39:09

回答

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 
0

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

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