используйте наборы инструментов clang для компиляции моего тестового кода, но я получил такие ошибки ...
Это больше, чем я могу вписать в комментарий, но он не отвечает навопрос. Это поможет вам решить проблему.
При сборке из командной строки с использованием NDK необходимо использовать тот же набор инструментов и те же параметры командной строки, что и в NDK. Вы этого не делаете, и ваши флаги C ++ действительно отличаются от того, что использует Android. Все известные мне NDK --sysroot
и исходные файлы C ++ используют -funwind-tables -fexceptions -frtti
. NDK r19 и NDK r20 используют -std=c++11
для файлов C ++. И последние NDK устанавливают __ANDROID_API__
, как -D__ANDROID_API__=21
.
Я собираю Crypto ++ и OpenSSL из командной строки для Android. Процедура работает, когда вы используете ту же цепочку инструментов и те же параметры командной строки, что и в NDK. Вот мои заметки о сборке Crypto ++, которая является другой библиотекой C ++: Android_ (Command_Line) .
Вам нужно сделать шаг назад, клонировать образцы Google NDK GitHub, проверить ветку android-mkи создайте программу Hello World. Обратите внимание на параметры компилятора. Используйте те же параметры компилятора в вашем проекте.
Вот как вы выполняете клон и строите пример:
android$ git clone https://github.com/googlesamples/android-ndk
android$ cd android-ndk
android$ git checkout android-mk
android$ cd hello-jni
android:hello-jni$ ndk-build APP_PLATFORM=android-29 V=1
...
BFLAGS := --target=$(TARGET_ARCH) -O2 -std=gnu++98 \
-B$(TOOLCHAIN)/sysroot/usr/lib/aarch64-linux-android/29 \
-I$(TOOLCHAIN)/clang-include
Серьезно? -std=gnu++98
?
Надеюсь, это был артефакт, оставшийся после тестирования.
Возможно, вы захотите взглянуть на некоторые документы Andoid NDK. Может быть, начать с Поддержка библиотеки C ++ . Android NDK r19 и NDK r20 используют LLVM libc++
. Механизм GNU исчез. Если вы хотите использовать механизм GNU, вернитесь к меньшему NDK, например r12 или r16.
(из комментариев): это простой тест, вы можете попробовать его на своем NDKсреда, если это не слишком много, чтобы спросить ...
Это не просто. Вы должны установить среду, создать исходные файлы и запустить сборку. Вам также не хватает ваших a.*
файлов. Вы должны предоставить GitHub репозиторий с установкой everything и скриптом, который запускает ваш процесс сборки.
Вот выходные данные из NDK r19 и android-28. Обратите внимание, насколько ваши варианты отличаются от параметров, которые использует Google. Обратите внимание на детали линий, таких как [arm64-v8a] Compile
.
android:hello-jni$ ndk-build APP_PLATFORM=android-28 V=1 clean &>/dev/null
android:hello-jni$ ndk-build APP_PLATFORM=android-28 V=1
Android NDK: WARNING: APP_PLATFORM android-28 is higher than android:minSdkVersion 3 in ./AndroidManifest.xml. NDK binaries will *not* be compatible with devices older than android-28. See https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md for more information.
rm -f ./libs/arm64-v8a/* ./libs/x86_64/* ./libs/armeabi-v7a/* ./libs/x86/*
rm -f ./libs/arm64-v8a/gdbserver ./libs/x86_64/gdbserver ./libs/armeabi-v7a/gdbserver ./libs/x86/gdbserver
rm -f ./libs/arm64-v8a/gdb.setup ./libs/x86_64/gdb.setup ./libs/armeabi-v7a/gdb.setup ./libs/x86/gdb.setup
[arm64-v8a] Gdbserver : [aarch64-linux-android] libs/arm64-v8a/gdbserver
install -p /opt/android-ndk-r19c/prebuilt/android-arm64/gdbserver/gdbserver ./libs/arm64-v8a/gdbserver
[arm64-v8a] Gdbsetup : libs/arm64-v8a/gdb.setup
echo "set solib-search-path ./obj/local/arm64-v8a" > ./libs/arm64-v8a/gdb.setup
echo "directory /opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/sysroot jni /opt/android-ndk-r19c/sources/cxx-stl/system" >> ./libs/arm64-v8a/gdb.setup
[x86_64] Gdbserver : [x86_64-linux-android] libs/x86_64/gdbserver
install -p /opt/android-ndk-r19c/prebuilt/android-x86_64/gdbserver/gdbserver ./libs/x86_64/gdbserver
[x86_64] Gdbsetup : libs/x86_64/gdb.setup
echo "set solib-search-path ./obj/local/x86_64" > ./libs/x86_64/gdb.setup
echo "directory /opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/sysroot jni /opt/android-ndk-r19c/sources/cxx-stl/system" >> ./libs/x86_64/gdb.setup
[armeabi-v7a] Gdbserver : [arm-linux-androideabi] libs/armeabi-v7a/gdbserver
install -p /opt/android-ndk-r19c/prebuilt/android-arm/gdbserver/gdbserver ./libs/armeabi-v7a/gdbserver
[armeabi-v7a] Gdbsetup : libs/armeabi-v7a/gdb.setup
echo "set solib-search-path ./obj/local/armeabi-v7a" > ./libs/armeabi-v7a/gdb.setup
echo "directory /opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/sysroot jni /opt/android-ndk-r19c/sources/cxx-stl/system" >> ./libs/armeabi-v7a/gdb.setup
[x86] Gdbserver : [i686-linux-android] libs/x86/gdbserver
install -p /opt/android-ndk-r19c/prebuilt/android-x86/gdbserver/gdbserver ./libs/x86/gdbserver
[x86] Gdbsetup : libs/x86/gdb.setup
echo "set solib-search-path ./obj/local/x86" > ./libs/x86/gdb.setup
echo "directory /opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/sysroot jni /opt/android-ndk-r19c/sources/cxx-stl/system" >> ./libs/x86/gdb.setup
[arm64-v8a] Compile : hello-jni <= hello-jni.c
rm -f ./obj/local/arm64-v8a/objs-debug/hello-jni/hello-jni.o
/opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -MMD -MP -MF ./obj/local/arm64-v8a/objs-debug/hello-jni/hello-jni.o.d -target aarch64-none-linux-android28 -fdata-sections -ffunction-sections -fstack-protector-strong -funwind-tables -no-canonical-prefixes --sysroot /opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -fno-addrsig -fpic -O0 -UNDEBUG -fno-limit-debug-info -Ijni -DANDROID -Wa,--noexecstack -Wformat -Werror=format-security -c jni/hello-jni.c -o ./obj/local/arm64-v8a/objs-debug/hello-jni/hello-jni.o
[arm64-v8a] SharedLibrary : libhello-jni.so
/opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -Wl,-soname,libhello-jni.so -shared ./obj/local/arm64-v8a/objs-debug/hello-jni/hello-jni.o -lgcc -Wl,--exclude-libs,libgcc.a -latomic -Wl,--exclude-libs,libatomic.a -target aarch64-none-linux-android28 -no-canonical-prefixes -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings -lc -lm -o ./obj/local/arm64-v8a/libhello-jni.so
[arm64-v8a] Install : libhello-jni.so => libs/arm64-v8a/libhello-jni.so
install -p ./obj/local/arm64-v8a/libhello-jni.so ./libs/arm64-v8a/libhello-jni.so
/opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip --strip-unneeded ./libs/arm64-v8a/libhello-jni.so
[x86_64] Compile : hello-jni <= hello-jni.c
rm -f ./obj/local/x86_64/objs-debug/hello-jni/hello-jni.o
/opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -MMD -MP -MF ./obj/local/x86_64/objs-debug/hello-jni/hello-jni.o.d -target x86_64-none-linux-android28 -fdata-sections -ffunction-sections -fstack-protector-strong -funwind-tables -no-canonical-prefixes --sysroot /opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -fno-addrsig -fPIC -O0 -UNDEBUG -fno-limit-debug-info -Ijni -DANDROID -Wa,--noexecstack -Wformat -Werror=format-security -c jni/hello-jni.c -o ./obj/local/x86_64/objs-debug/hello-jni/hello-jni.o
[x86_64] SharedLibrary : libhello-jni.so
/opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -Wl,-soname,libhello-jni.so -shared ./obj/local/x86_64/objs-debug/hello-jni/hello-jni.o -lgcc -Wl,--exclude-libs,libgcc.a -latomic -Wl,--exclude-libs,libatomic.a -target x86_64-none-linux-android28 -no-canonical-prefixes -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings -lc -lm -o ./obj/local/x86_64/libhello-jni.so
[x86_64] Install : libhello-jni.so => libs/x86_64/libhello-jni.so
install -p ./obj/local/x86_64/libhello-jni.so ./libs/x86_64/libhello-jni.so
/opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android-strip --strip-unneeded ./libs/x86_64/libhello-jni.so
[armeabi-v7a] Compile thumb : hello-jni <= hello-jni.c
rm -f ./obj/local/armeabi-v7a/objs-debug/hello-jni/hello-jni.o
/opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -MMD -MP -MF ./obj/local/armeabi-v7a/objs-debug/hello-jni/hello-jni.o.d -target armv7-none-linux-androideabi28 -fdata-sections -ffunction-sections -fstack-protector-strong -funwind-tables -no-canonical-prefixes --sysroot /opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -fno-addrsig -fpic -mfpu=vfpv3-d16 -march=armv7-a -mthumb -O0 -UNDEBUG -fno-limit-debug-info -mfpu=neon -Ijni -DANDROID -Wa,--noexecstack -Wformat -Werror=format-security -c jni/hello-jni.c -o ./obj/local/armeabi-v7a/objs-debug/hello-jni/hello-jni.o
[armeabi-v7a] SharedLibrary : libhello-jni.so
/opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -Wl,-soname,libhello-jni.so -shared ./obj/local/armeabi-v7a/objs-debug/hello-jni/hello-jni.o -lgcc -Wl,--exclude-libs,libgcc.a -latomic -Wl,--exclude-libs,libatomic.a -target armv7-none-linux-androideabi28 -no-canonical-prefixes -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings -lc -lm -o ./obj/local/armeabi-v7a/libhello-jni.so
[armeabi-v7a] Install : libhello-jni.so => libs/armeabi-v7a/libhello-jni.so
install -p ./obj/local/armeabi-v7a/libhello-jni.so ./libs/armeabi-v7a/libhello-jni.so
/opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip --strip-unneeded ./libs/armeabi-v7a/libhello-jni.so
[x86] Compile : hello-jni <= hello-jni.c
rm -f ./obj/local/x86/objs-debug/hello-jni/hello-jni.o
/opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -MMD -MP -MF ./obj/local/x86/objs-debug/hello-jni/hello-jni.o.d -target i686-none-linux-android28 -fdata-sections -ffunction-sections -fstack-protector-strong -funwind-tables -no-canonical-prefixes --sysroot /opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -fno-addrsig -fPIC -O0 -UNDEBUG -fno-limit-debug-info -Ijni -DANDROID -Wa,--noexecstack -Wformat -Werror=format-security -c jni/hello-jni.c -o ./obj/local/x86/objs-debug/hello-jni/hello-jni.o
[x86] SharedLibrary : libhello-jni.so
/opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -Wl,-soname,libhello-jni.so -shared ./obj/local/x86/objs-debug/hello-jni/hello-jni.o -lgcc -Wl,--exclude-libs,libgcc.a -latomic -Wl,--exclude-libs,libatomic.a -target i686-none-linux-android28 -no-canonical-prefixes -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings -lc -lm -o ./obj/local/x86/libhello-jni.so
[x86] Install : libhello-jni.so => libs/x86/libhello-jni.so
install -p ./obj/local/x86/libhello-jni.so ./libs/x86/libhello-jni.so
/opt/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android-strip --strip-unneeded ./libs/x86/libhello-jni.so