Как предотвратить блокирование кода на ARMv6 для толстого бинарного файла? - PullRequest
1 голос
/ 09 декабря 2010

У меня есть проект для iPhone, настроенный на компиляцию для архитектур armv6 и armv7.И мне нужно исключить некоторый код из компиляции для архитектуры armv6, потому что это вызывает сбой среды выполнения на устройстве (исключение неправильных инструкций).

Есть ли определение для путей компиляции armv6 / armv7 (например, "_DEBUG")?

Ответы [ 2 ]

1 голос
/ 10 декабря 2010

Прежде всего, вам не нужно предотвращать их компиляцию , вам нужно предотвращать их выполнение. В конце концов, сбой происходит во время выполнения, а не во время компиляции.

Тем не менее, самый простой способ сделать это - иметь два пути кода и скомпилировать соответствующий раздел на основе архитектуры:

#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 голосов
/ 09 декабря 2010

Одним из способов решения этой проблемы может быть сбор всех источников только для armv6 в подпроект и их компиляция в виде статической библиотеки, а затем связывание этой библиотеки с толстым приложением.

Можно также указать дополнительные флаги сборки для исходного файла в XCode, но я не знаком с синтаксисом или тем, что еще потребуется для того, чтобы по существу вернуть уже выпущенный флаг (например, флаг для указания компиляции в armv7.)

...