首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.lang.UnsatisfiedLinkError: dlopen失败:未找到库"libc++.so“

java.lang.UnsatisfiedLinkError: dlopen失败:未找到库"libc++.so“
EN

Stack Overflow用户
提问于 2016-09-07 12:56:20
回答 1查看 7.1K关注 0票数 1

我试图在我的安卓应用程序中使用两个预构建的本机库(.so)。为此,我创建了一个JNI项目,完成了以下工作:

  1. 创建了java本机库并使用javac编译。
  2. 使用javah -jni命令创建C头
  3. 创建了相应的C源文件,其中实现了方法
  4. 这个C源代码(其中的方法)将引用.so文件公开的方法
  5. 编写Android.mk文件。现将其说明如下。
  6. 使用ndk构建它,然后将其推送到移动设备上。

Android.mk

代码语言:javascript
运行
复制
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := libmodule1
LOCAL_SRC_FILES := prebuilts/$(TARGET_ARCH_ABI)/libmodule1.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE    := libmodule2
LOCAL_SRC_FILES := prebuilts/$(TARGET_ARCH_ABI)/libmodule2.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE    := com_example_androidwrapper_NativeLibrary
LOCAL_SRC_FILES := com_example_androidwrapper_NativeLibrary.c
LOCAL_SHARED_LIBRARIES := libmodule1 libmodule2 
include $(BUILD_SHARED_LIBRARY)

当我运行这个应用程序时,我会得到以下错误。

代码语言:javascript
运行
复制
java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++.so" not found

如果我不加载module1,module2库应用程序会正常工作(我注释掉了对这两个模块公开的方法的调用,并重写了Android.mk文件,仅仅是为了构建一个共享库,而不是使用任何预先构建的库)。

任何帮助都是非常感谢的。谢谢。

我已经成功地使用了来自本机应用程序的预构建.so文件,我在同一个目标设备中运行了该应用程序。当我更改application.mk "APP_ABI := all“时,它给了我以下错误。

代码语言:javascript
运行
复制
[x86_64] Prebuilt       : module1.so <= jni/
[x86_64] Install        : module1.so => libs/x86_64/module1.so
C:/Users/user/AppData/Local/Android/android-ndk-r12b/build//../toolchains/x86_64-4.9/prebuilt/windows/bin/x86_64-linux-android-strip: Un
able to recognise the format of the input file `./libs/x86_64/module1.so'
make: *** [libs/x86_64/module1.so] Error 1
make: *** Deleting file `libs/x86_64/module1.so'

我认为预构建的.so文件应该在arm64-v8a本身中运行。

EN

回答 1

Stack Overflow用户

发布于 2016-09-08 07:30:31

什么是libmodule1.so?听起来,这是一个库,你拿出了一个android设备,并试图使用。这几乎只能适用于你从里面拿出来的那个装置。

至于第二部分,听起来您的x86_64目录中的库实际上不是x86_64库。试试$NDK/toolchains/x86_64-4.9/prebuilt/$YOUR_OS/bin/x86_64-linux-android-readelf -h module1.so。它将打印库的ELF头。其中一行应是:

代码语言:javascript
运行
复制
Machine:                           Advanced Micro Devices X86-64

如果机器的值是其他值,那么它不是x86_64库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39370562

复制
相关文章

相似问题

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