неопределенная ссылка на `_Unwind_Resume 'при компиляции кода C ++ с помощью clang ++ с использованием Android NDK - PullRequest
1 голос
/ 25 октября 2019

Как описано в заголовке, я загружаю Android NDK из https://developer.android.google.cn/ndk/downloads/index.html и использую наборы инструментов clang для компиляции моего тестового кода, но я получил такие ошибки:

========== [CC] ==========
mkdir -p  /home/projects/llvm/out
/home/projects/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android29-clang --target=aarch64-linux-android -O2 -std=c99 -B/home/projects/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/29  -c src/a.c -o /home/projects/llvm/out/a.o
========== [LINK] ==========
mkdir -p /home/projects/llvm/out
/home/projects/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ld -L/home/projects/android-ndk-r20/platforms/android-29/arch-arm64/usr/lib -L/home/projects/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/29 -lc -e main /home/projects/llvm/out/a.o -o /home/projects/llvm/out/a.elf
========== [CPP] ==========
mkdir -p  /home/projects/llvm/out
/home/projects/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android29-clang++ --target=aarch64-linux-android -O2 -std=gnu++98 -B/home/projects/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/29 -I/home/projects/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/clang-include -c src/b.cpp -o /home/projects/llvm/out/b.o
========== [LINK] ==========
mkdir -p /home/projects/llvm/out
/home/projects/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ld -L/home/projects/android-ndk-r20/platforms/android-29/arch-arm64/usr/lib -L/home/projects/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/29 -L/home/projects/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android -rpath-link /home/projects/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/29 -lc -lc++ -lc++_shared -lc++abi -lstdc++ -e main /home/projects/llvm/out/b.o -o /home/projects/llvm/out/b.elf
/home/projects/llvm/out/b.o: In function `main':
b.cpp:(.text+0x138): undefined reference to `_Unwind_Resume'
/home/projects/llvm/out/b.o: In function `std::__ndk1::basic_istream<char, std::__ndk1::char_traits<char> >& std::__ndk1::operator>><char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >(std::__ndk1::basic_istream<char, std::__ndk1::char_traits<char> >&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >&)':
b.cpp:(.text._ZNSt6__ndk1rsIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS_13basic_istreamIT_T0_EES9_RNS_12basic_stringIS6_S7_T1_EE[_ZNSt6__ndk1rsIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS_13basic_istreamIT_T0_EES9_RNS_12basic_stringIS6_S7_T1_EE]+0x214): undefined reference to `_Unwind_Resume'
/home/projects/llvm/out/b.o: In function `std::__ndk1::basic_ostream<char, std::__ndk1::char_traits<char> >::operator<<(double)':
b.cpp:(.text._ZNSt6__ndk113basic_ostreamIcNS_11char_traitsIcEEElsEd[_ZNSt6__ndk113basic_ostreamIcNS_11char_traitsIcEEElsEd]+0x1b4): undefined reference to `_Unwind_Resume'
/home/projects/llvm/out/b.o: In function `std::__ndk1::basic_istream<char, std::__ndk1::char_traits<char> >& std::__ndk1::__input_arithmetic_with_numeric_limits<int, char, std::__ndk1::char_traits<char> >(std::__ndk1::basic_istream<char, std::__ndk1::char_traits<char> >&, int&)':
b.cpp:(.text._ZNSt6__ndk138__input_arithmetic_with_numeric_limitsIicNS_11char_traitsIcEEEERNS_13basic_istreamIT0_T1_EES7_RT_[_ZNSt6__ndk138__input_arithmetic_with_numeric_limitsIicNS_11char_traitsIcEEEERNS_13basic_istreamIT0_T1_EES7_RT_]+0x144): undefined reference to `_Unwind_Resume'
/home/projects/llvm/out/b.o: In function `std::__ndk1::basic_istream<char, std::__ndk1::char_traits<char> >::sentry::sentry(std::__ndk1::basic_istream<char, std::__ndk1::char_traits<char> >&, bool)':
b.cpp:(.text._ZNSt6__ndk113basic_istreamIcNS_11char_traitsIcEEE6sentryC2ERS3_b[_ZNSt6__ndk113basic_istreamIcNS_11char_traitsIcEEE6sentryC2ERS3_b]+0x1cc): undefined reference to `_Unwind_Resume'
/home/projects/llvm/out/b.o:b.cpp:(.text._ZNSt6__ndk113basic_ostreamIcNS_11char_traitsIcEEE5flushEv[_ZNSt6__ndk113basic_ostreamIcNS_11char_traitsIcEEE5flushEv]+0xf0): more undefined references to `_Unwind_Resume' follow
make: *** [/home/projects/llvm/out/b.elf] Error 1

это простоtest:

.
├── Makefile
└── src
    ├── a.c
    └── b.cpp

1 directory, 3 files

Makefile:

ROOT := /home/projects
NDK := $(ROOT)/android-ndk-r20
TOOLCHAIN := $(NDK)/toolchains/llvm/prebuilt/linux-x86_64
TARGET_ARCH := aarch64-linux-android
ANDROID_API_LEVEL := 29

CC := $(TOOLCHAIN)/bin/$(TARGET_ARCH)$(ANDROID_API_LEVEL)-clang
CPP := $(TOOLCHAIN)/bin/$(TARGET_ARCH)$(ANDROID_API_LEVEL)-clang++
LD := $(TOOLCHAIN)/bin/$(TARGET_ARCH)-ld

AFLAGS := --target=$(TARGET_ARCH) -O2 -std=c99 \
    -B$(TOOLCHAIN)/sysroot/usr/lib/aarch64-linux-android/29 \

BFLAGS := --target=$(TARGET_ARCH) -O2 -std=gnu++98 \
    -B$(TOOLCHAIN)/sysroot/usr/lib/aarch64-linux-android/29 \
    -I$(TOOLCHAIN)/clang-include

ALDFLAGS := -L$(NDK)/platforms/android-29/arch-arm64/usr/lib \
    -L$(TOOLCHAIN)/sysroot/usr/lib/aarch64-linux-android/29 \
    -lc -e main

BLDFLAGS := -L$(NDK)/platforms/android-29/arch-arm64/usr/lib \
    -L$(TOOLCHAIN)/sysroot/usr/lib/aarch64-linux-android/29 \
    -L$(TOOLCHAIN)/sysroot/usr/lib/aarch64-linux-android \
    -rpath-link $(TOOLCHAIN)/sysroot/usr/lib/aarch64-linux-android/29 \
    -lc -lc++ -lc++_shared -lc++abi -lstdc++ -e main

BUILD_DIR := $(ROOT)/llvm/out

SRC_C := $(wildcard src/*.c)
SRC_CPP := $(wildcard src/*.cpp)
C_TARGET := a.elf
CPP_TARGET := b.elf
C_OBJS := $(notdir $(SRC_C:%.c=%.o))
CPP_OBJS := $(notdir $(SRC_CPP:%.cpp=%.o))
TARGETS := $(BUILD_DIR)/$(C_TARGET) $(BUILD_DIR)/$(CPP_TARGET)

_all: $(TARGETS)
    @echo
    @ls -al out

# C
$(BUILD_DIR)/$(C_TARGET): $(BUILD_DIR)/$(C_OBJS)
    @echo "========== [LINK] =========="
    mkdir -p $(BUILD_DIR)
    $(LD) $(ALDFLAGS) -v $< -o $@

$(BUILD_DIR)/$(C_OBJS): $(SRC_C)
    @echo "========== [CC] =========="
    mkdir -p  $(BUILD_DIR)
    $(CC) $(AFLAGS) -v -c $< -o $@

# CPP
$(BUILD_DIR)/$(CPP_TARGET): $(BUILD_DIR)/$(CPP_OBJS)
    @echo "========== [LINK] =========="
    mkdir -p $(BUILD_DIR)
    $(LD) $(BLDFLAGS) -v $< -o $@

$(BUILD_DIR)/$(CPP_OBJS): $(SRC_CPP)
    @echo "========== [CPP] =========="
    mkdir -p  $(BUILD_DIR)
    $(CPP) $(BFLAGS) -v -c $< -o $@

clean:
    rm -rf $(BUILD_DIR)

b.cpp:

#include<iostream>
#include<string>
#include<cmath>
using namespace std;

int main()
{
    string s;
    int n;
    std::cin>>n>>s;
    std::cout<<"sqrt(n) = "<<sqrt(n)<<", s = "<<s<<endl;
}

Странно, что код C мог правильно скомпилироваться, но C ++ не смог, наконец-то яВыяснили, что это "cin" и "cout" в b.cpp, которые вызывают эту ошибку, компиляция будет успешной, если вместо этого использовать "scanf" и "printf". Но я могу скомпилировать и запустить код с помощью gcc, поэтому код не виноват.

Я пытался добавить -lgcc_s в LDFLAGS, но он не включен в NDK, ld не может его найти, я что-то упускаю?

1 Ответ

1 голос
/ 25 октября 2019

используйте наборы инструментов 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
...