Подтвердить что ты не робот

Какой компилятор использует Android NDK?

Я пишу код ARM NEON для приложения для Android, и я боролся с некоторыми флагами компилятора, которые не распознаются. Позже я понял, что поддержка этих флагов была добавлена ​​совсем недавно и что моя версия GCC старше. Я делаю все это в Windows и ограничусь тем, что могут предложить Cygwin. Вот мой вопрос: прежде чем я пойду и попытаюсь построить GCC 4.6.0 на своей машине Windows и сделаю Cygwin таким, как это будет, это сработает для меня или NDK использует свою собственную версию GCC, и мое обновление вообще не повлияет на нее? Если это так, можно ли ему использовать другой компилятор?

4b9b3361

Ответ 1

Сам NDK вызывает настраиваемый кросс-компилятор, построенный на компиляторе arm-eabi-gcc. Есть примеры того, как люди создают пользовательские инструментальные цепочки с использованием стандартных реализаций GCC с поддержкой наборов инструкций ARM, но этот выход из моей лиги. Большинство материалов, которые я читал в прошлом, всегда обсуждали с помощью инструментальной цепочки, включенной в NDK, для компиляции собственного кода.

Следствие. Большинство людей, которые жаловались и вынуждены были создать свою собственную инструментальную цепочку, были людьми, которые были расстроены (предполагаемой) вспомогательной поддержкой С++ в компиляторе инструментальных средств NDK. Я не могу говорить об этом, потому что некоторые из статей были старше, и Android так быстро меняется. Это также не было мнением, которое, кажется, появляется слишком часто.

Ответ 2

Относительно NDK r8d его можно изменить двумя способами (см. Andriod ndk):

  • Для ndk-build экспортируйте переменную NDK_TOOLCHAIN_VERSION = 4.7 или добавьте ее в Application.mk.
  • Для автономных сборок добавьте параметр --toolchain = для make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.7

Компилятор по умолчанию установлен в ndk/build/core/setup-toolchain.mk(см. NDK_TOOLCHAIN ​​и NDK_TOOLCHAIN_VERSION)

Ответ 3

GCC устарел в пользу clang с NDK 11 (март 2016)

Упоминается в официальной истории изменений: https://developer.android.com/ndk/downloads/revision_history.html

Как переключиться между компиляторами задается по адресу:

И вы можете легко проверить это:

enum CONSTEXPR {N = 256};
char s[N];
#ifdef __clang__
        snprintf(s, N, "%s", "clang" __clang_version__);
#else
# ifdef __GNUC__
        snprintf(s, N, "%s %d.%d.%d", "gcc", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
# endif
#endif

затем просто запишите s или верните его в TextView.