Как предотвратить блокирование кода на ARMv6 для толстого бинарного файла?
У меня есть проект для iPhone, настроенный для компиляции для архитектур armv6 и armv7. И мне нужно исключить некоторый код из компиляции для архитектуры armv6, потому что это вызывает сбой во время выполнения на устройстве (исключение неправильных инструкций).
Есть ли определение для путей компиляции armv6/armv7 (например, "_DEBUG")?
2 ответа
Во-первых, вам не нужно предотвращать их компиляцию, вам нужно предотвращать их выполнение. Авария происходит во время выполнения, в конце концов, не во время компиляции.
Тем не менее, самый простой способ сделать это состоит в том, чтобы иметь два пути кода и скомпилировать соответствующий раздел на основе архитектуры:
#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
Одним из обходных путей может быть сбор всех источников только для armv6 в подпроект и их компиляция в виде статической библиотеки, а затем связывание этой библиотеки с толстым приложением.
Можно также указать дополнительные флаги сборки для исходного файла в XCode, но я не знаком с синтаксисом или тем, что еще потребуется для того, чтобы по существу вернуть уже выпущенный флаг (например, флаг для указания компиляции в armv7.)