Строить андроид с clang вместо gcc? и clang stl lib вместо gnustl lib?

Я пытаюсь создать приложение Android ndk, используя clang вместо gcc, потому что знаю, что я пробовал это в Android.mk

NDK_TOOLCHAIN_VERSION := clang
LOCAL_CLANG :=true
LOCAL_LDLIBS := -lc++_static
LOCAL_CFLAGS := -std=c++11

и в Application.mk

APP_PLATFORM    := android-9
APP_STL         := libc++_static
APP_CPPFLAGS    := -fexceptions -frtti
APP_ABI         := armeabi-v7a

но он всегда дает мне ссылки на ошибки в библиотеке std.

Любая помощь приветствуется!

Ответ 1

В ваших файлах *.mk есть несколько ошибок:

libc++_static не является правильным значением для APP_STL, здесь должно быть c++_static.

NDK_TOOLCHAIN_VERSION не действует при установке в Android.mk, он должен быть установлен внутри Application.mk

LOCAL_CLANG - это переменная, используемая внутри системных модулей от AOSP, а не при использовании NDK.

Поскольку вы устанавливаете APP_STL как c++_static, инструментальная цепочка NDK правильно сообщит компоновщику, что использовать lib, вы не должны добавлять LOCAL_LDLIBS := -lc++_static.

Кроме того, вы устанавливаете APP_ABI только в armeabi-v7a, это специально? Android работает и на других архитектурах, и вы получите лучшую производительность, если вы также скомпилируете свои библиотеки. Вы можете установить APP_ABI в all или в список архитектур armeabi-v7a x86...

Вкратце:

Android.mk

LOCAL_CFLAGS := -std=c++11

Application.mk

NDK_TOOLCHAIN_VERSION := clang

APP_PLATFORM    := android-9
APP_STL         := c++_static
APP_CPPFLAGS    := -fexceptions -frtti
APP_ABI         := all

Если у вас есть некоторые проблемы с компиляцией кода, пожалуйста, покажите точные ошибки, которые вы получаете.

Ответ 2

Настройки здания верны, в основном это происходит потому, что вы связываетесь с библиотекой, которая использует gcc вместо clang. проверьте, не использует ли ваша связанная библиотека clang!