2010-12-09 1 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.)