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 ...
}