Android NDK构建32Bits共享库

时间:2020-07-19 07:42:59

标签: android-ndk

我想在Ubuntu 19.04上为APP_ABI类型armeabi-v7a构建Android jni共享库,但出现错误。我尝试使用多个Android ndk版本r9d,r10e,r16b和r21,得出相同的结果。在所有APP_ABI中,arm64-v8a,mips和mips64成功,而其他则不成功。这是消息:

root@vmuser-virtual-machine:/mnt/hgfs/facedlib/Dlib4Android# ndk-build -B V=1
TOP Level Path: /mnt/hgfs/facedlib/Dlib4Android
TOP Level Path: /mnt/hgfs/facedlib/Dlib4Android
rm -f ./libs/arm64-v8a/* ./libs/armeabi/* ./libs/armeabi-v7a/* ./libs/mips/* ./libs/mips64/* ./libs/x86/* ./libs/x86_64/*
rm -f ./libs/arm64-v8a/gdbserver ./libs/armeabi/gdbserver ./libs/armeabi-v7a/gdbserver ./libs/mips/gdbserver ./libs/mips64/gdbserver ./libs/x86/gdbserver ./libs/x86_64/gdbserver
rm -f ./libs/arm64-v8a/gdb.setup ./libs/armeabi/gdb.setup ./libs/armeabi-v7a/gdb.setup ./libs/mips/gdb.setup ./libs/mips64/gdb.setup ./libs/x86/gdb.setup ./libs/x86_64/gdb.setup
[arm64-v8a] Compile++      : native_lib <= native_try.cpp
/home/vmuser/android/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -MMD -MP -MF ./obj/local/arm64-v8a/objs/native_lib/native_try.o.d -gcc-toolchain /home/vmuser/android/android-ndk-r16b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64 -target aarch64-none-linux-android -ffunction-sections -funwind-tables -fstack-protector-strong -fpic -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -no-canonical-prefixes  -g -fno-exceptions -fno-rtti -O2 -DNDEBUG  -I. -I/home/vmuser/android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/include -I/home/vmuser/android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/../llvm-libc++abi/include -I/home/vmuser/android/android-ndk-r16b/sources/android/support/include -Ijni -std=c++11 -DDLIB_NO_GUI_SUPPORT -frtti -fexceptions -std=c++11  -DANDROID  -D__ANDROID_API__=21 -Wa,--noexecstack -Wformat -Werror=format-security   --sysroot /home/vmuser/android/android-ndk-r16b/sysroot -isystem /home/vmuser/android/android-ndk-r16b/sysroot/usr/include/aarch64-linux-android -c  jni/native_try.cpp -o ./obj/local/arm64-v8a/objs/native_lib/native_try.o
[arm64-v8a] Prebuilt       : libc++_shared.so <= <NDK>/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/
cp -f /home/vmuser/android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so obj/local/arm64-v8a/libc++_shared.so
[arm64-v8a] SharedLibrary  : libnative_lib.so
/home/vmuser/android/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -Wl,-soname,libnative_lib.so -shared --sysroot=/home/vmuser/android/android-ndk-r16b/platforms/android-21/arch-arm64 ./obj/local/arm64-v8a/objs/native_lib/native_try.o /home/vmuser/android/android-ndk-r16b/sources/android/support/../../cxx-stl/llvm-libc++/libs/arm64-v8a/libandroid_support.a -latomic -Wl,--exclude-libs,libatomic.a ./obj/local/arm64-v8a/libc++_shared.so  -gcc-toolchain /home/vmuser/android/android-ndk-r16b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64 -target aarch64-none-linux-android -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/libnative_lib.so
[arm64-v8a] Install        : libnative_lib.so => libs/arm64-v8a/libnative_lib.so
install -p ./obj/local/arm64-v8a/libnative_lib.so ./libs/arm64-v8a/libnative_lib.so
/home/vmuser/android/android-ndk-r16b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip --strip-unneeded  ./libs/arm64-v8a/libnative_lib.so
[arm64-v8a] Install        : libc++_shared.so => libs/arm64-v8a/libc++_shared.so
install -p ./obj/local/arm64-v8a/libc++_shared.so ./libs/arm64-v8a/libc++_shared.so
/home/vmuser/android/android-ndk-r16b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip --strip-unneeded  ./libs/arm64-v8a/libc++_shared.so
[armeabi-v7a] Compile++ thumb: native_lib <= native_try.cpp
/home/vmuser/android/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -MMD -MP -MF ./obj/local/armeabi-v7a/objs/native_lib/native_try.o.d -gcc-toolchain /home/vmuser/android/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 -fpic -ffunction-sections -funwind-tables -fstack-protector-strong -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -no-canonical-prefixes -fno-integrated-as -g -target armv7-none-linux-androideabi16 -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-exceptions -fno-rtti -mthumb -Os -DNDEBUG  -I. -I/home/vmuser/android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/include -I/home/vmuser/android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/../llvm-libc++abi/include -I/home/vmuser/android/android-ndk-r16b/sources/android/support/include -Ijni -std=c++11 -DDLIB_NO_GUI_SUPPORT -frtti -fexceptions -std=c++11  -DANDROID  -D__ANDROID_API__=16 -Wa,--noexecstack -Wformat -Werror=format-security   --sysroot /home/vmuser/android/android-ndk-r16b/sysroot -isystem /home/vmuser/android/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -c  jni/native_try.cpp -o ./obj/local/armeabi-v7a/objs/native_lib/native_try.o
[armeabi-v7a] Prebuilt       : libc++_shared.so <= <NDK>/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/
cp -f /home/vmuser/android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so obj/local/armeabi-v7a/libc++_shared.so
[armeabi-v7a] SharedLibrary  : libnative_lib.so
/home/vmuser/android/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -Wl,-soname,libnative_lib.so -shared --sysroot=/home/vmuser/android/android-ndk-r16b/platforms/android-16/arch-arm ./obj/local/armeabi-v7a/objs/native_lib/native_try.o /home/vmuser/android/android-ndk-r16b/sources/android/support/../../cxx-stl/llvm-libc++/libs/armeabi-v7a/libandroid_support.a /home/vmuser/android/android-ndk-r16b/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libunwind.a -latomic -Wl,--exclude-libs,libatomic.a ./obj/local/armeabi-v7a/libc++_shared.so  -gcc-toolchain /home/vmuser/android/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 -no-canonical-prefixes -target armv7-none-linux-androideabi16 -Wl,--fix-cortex-a8 -Wl,--exclude-libs,libunwind.a -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/libnative_lib.so
/home/vmuser/android/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: fatal error: ./obj/local/armeabi-v7a/libnative_lib.so: 输入/输出错误(input/output error)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [obj/local/armeabi-v7a/libnative_lib.so] Error 1

我的Application.mk是

#APP_STL := gnustl_static # Compatible with opencv2,But needed to redefine std::to_string
#APP_STL := c++_static
APP_STL := c++_shared
APP_CPPFLAGS := -frtti -fexceptions -std=c++11
#APP_ABI := armeabi-v7a armeabi arm64-v8a x86 x86_64 mips mips64
APP_ABI := arm64-v8a armeabi-v7a
APP_PLATFORM := android-16
APP_CFLAGS+=-DDLIB_NO_GUI_SUPPORT

我的Android.mk是

LOCAL_PATH := $(call my-dir)
SUB_MK_FILES := $(call all-subdir-makefiles)

include $(CLEAR_VARS)
LOCAL_MODULE     := native_lib
LOCAL_C_INCLUDES := .
LOCAL_SRC_FILES  += native_try.cpp

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)
include $(BUILD_SHARED_LIBRARY)
#include $(BUILD_STATIC_LIBRARY)

TOP_LEVEL_PATH := $(abspath $(LOCAL_PATH)/..)
$(info TOP Level Path: $(TOP_LEVEL_PATH))

include $(SUB_MK_FILES)

我的native_try.cpp是

#include <jni.h>
#include <string>

extern "C" {

JNIEXPORT jstring JNICALL
Java_com_hongzhen_myndklibrary_NDKTest_testNDK(JNIEnv *env, jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

}

0 个答案:

没有答案