Какой компилятор использует Android NDK? - PullRequest
21 голосов
/ 07 июля 2011

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

Ответы [ 3 ]

18 голосов
/ 16 января 2013

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

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

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

11 голосов
/ 07 июля 2011

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

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

6 голосов

GCC не рекомендуется в пользу clang по состоянию на 11 NDK (март 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.

...