Android NDK/JNI -- 与 armelf_linux_eabi 不兼容的共享库
Android NDK/JNI -- shared library incompatible with armelf_linux_eabi
我正在尝试使用 Android NDK 和 JNI 在我的 Android Studio 项目中从 Kotlin 调用 C++ 函数。
这是我的 Android 项目结构:
myproject/app/src/main
│
└───java
│ │
│ └───com.example.myproject
│ │ MainActivity.kt
│
└───cpp
| │ native-lib.cpp
| │ CMakeLists.txt
| │
| └───mylib
| │ Number.hpp
| | Number.cpp
│
└───jniLibs
│ libmylib.so
注意,我已经将此程序构建到 libmylib.so
中,并将其保存到 src/main/jniLibs
中。我想使用这个内置的库,而不是直接 Number.cpp
。
我的 CMakeLists.txt
文件如下所示:
cmake_minimum_required(VERSION 3.10.2)
project("myproject")
add_library(myproject SHARED native-lib.cpp)
add_library(MYLIB SHARED IMPORTED)
set_target_properties(MYLIB PROPERTIES IMPORTED_LOCATION jniLibs/libmylib.so)
target_link_libraries(myproject MYLIB)
然而我在构建时遇到了这个错误:
C/C++: ld: error: jniLibs/libmylib.so is incompatible with armelf_linux_eabi
我怎样才能让 cmake 正确地 link 我项目的库?
链接器错误表明您正在构建 myproject
的 ABI 不同于 libmylib.so
构建的 ABI。
您可以通过添加 ABI 过滤器告诉 Gradle 只为一个或多个特定的 ABI 构建您的本机代码:
android {
defaultConfig {
ndk {
abiFilters 'arm64-v8a'
}
}
... other stuff ...
}
我正在尝试使用 Android NDK 和 JNI 在我的 Android Studio 项目中从 Kotlin 调用 C++ 函数。
这是我的 Android 项目结构:
myproject/app/src/main
│
└───java
│ │
│ └───com.example.myproject
│ │ MainActivity.kt
│
└───cpp
| │ native-lib.cpp
| │ CMakeLists.txt
| │
| └───mylib
| │ Number.hpp
| | Number.cpp
│
└───jniLibs
│ libmylib.so
注意,我已经将此程序构建到 libmylib.so
中,并将其保存到 src/main/jniLibs
中。我想使用这个内置的库,而不是直接 Number.cpp
。
我的 CMakeLists.txt
文件如下所示:
cmake_minimum_required(VERSION 3.10.2)
project("myproject")
add_library(myproject SHARED native-lib.cpp)
add_library(MYLIB SHARED IMPORTED)
set_target_properties(MYLIB PROPERTIES IMPORTED_LOCATION jniLibs/libmylib.so)
target_link_libraries(myproject MYLIB)
然而我在构建时遇到了这个错误:
C/C++: ld: error: jniLibs/libmylib.so is incompatible with armelf_linux_eabi
我怎样才能让 cmake 正确地 link 我项目的库?
链接器错误表明您正在构建 myproject
的 ABI 不同于 libmylib.so
构建的 ABI。
您可以通过添加 ABI 过滤器告诉 Gradle 只为一个或多个特定的 ABI 构建您的本机代码:
android {
defaultConfig {
ndk {
abiFilters 'arm64-v8a'
}
}
... other stuff ...
}