首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android /JNI-与armelf_linux_eabi不兼容的共享库

Android /JNI-与armelf_linux_eabi不兼容的共享库
EN

Stack Overflow用户
提问于 2022-03-07 19:35:05
回答 1查看 993关注 0票数 0

我试图使用Android和JNI在我的Android项目中从Kotlin调用一个C++函数。

以下是我的Android项目结构:

代码语言:javascript
运行
复制
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文件如下所示:

代码语言:javascript
运行
复制
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)

然而,我在构建时会遇到这样的错误:

代码语言:javascript
运行
复制
C/C++: ld: error: jniLibs/libmylib.so is incompatible with armelf_linux_eabi

如何使cmake正确地将库链接到我的项目?

EN

Stack Overflow用户

回答已采纳

发布于 2022-03-09 08:48:25

链接器错误表明,您构建的myprojectlibmylib.so构建的不同。

通过添加ABI过滤器,您可以告诉Gradle只为一个或多个特定ABI构建本地代码:

代码语言:javascript
运行
复制
android {
    defaultConfig {
        ndk {
            abiFilters 'arm64-v8a'
        }
    }
    ... other stuff ...
}
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71386355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档