我试图使用Android和JNI在我的Android项目中从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正确地将库链接到我的项目?
发布于 2022-03-09 08:48:25
链接器错误表明,您构建的myproject
与libmylib.so
构建的不同。
通过添加ABI过滤器,您可以告诉Gradle只为一个或多个特定ABI构建本地代码:
android {
defaultConfig {
ndk {
abiFilters 'arm64-v8a'
}
}
... other stuff ...
}
https://stackoverflow.com/questions/71386355
复制相似问题