java.lang.UnsatisfiedLinkError: dlopen failed: 找不到库"libc++.so"
java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++.so" not found
我正在尝试在我的Android应用程序中使用两个预构建的本地库(.so(。为此,我创建了一个JNI项目,其中我做了以下工作,
- 创建了一个java原生库并使用javac进行编译
- 使用javah-jni命令创建了一个C头
- 创建了一个相应的C源文件,其中实现了这些方法
- 此C源代码(其中的方法(将引用.so文件公开的方法
- Android.mk文件已写入。下面给出了它
- 使用ndk构建,它被构建,然后推送到移动设备
Android.mk
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)
当我运行此应用程序时,我收到以下错误。
java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++.so" not found
如果我不加载module1,module2库应用程序将正常工作(我注释掉了对这两个模块公开的方法的调用,并重写了Android.mk文件,只是为了构建一个共享库,而不是使用任何预构建的库(这很正常。
感谢您的帮助。谢谢
我已经成功地使用了我在同一目标设备上运行的本机应用程序中的预构建.so文件。当我更改应用程序时.mk"APP_ABI:=all"它给了我以下错误。
[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本身中运行。
什么是libmodule1.so?这听起来像是一个你从安卓设备上取下并试图使用的库。这几乎只适用于你从中取出的确切设备。
至于第二部分,听起来x86_64目录中的库实际上并不是x86_64库。尝试$NDK/toolchains/x86_64-4.9/prebuilt/$YOUR_OS/bin/x86_64-linux-android-readelf -h module1.so
。它将打印库的ELF标题。其中一行应该是:
Machine: Advanced Micro Devices X86-64
如果machine的值是其他值,那么它就不是x86_64库。
相关文章:
- 如何使用ndk-build.cmd构建Android.so文件
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 使用 libc.so.6 捆绑 c++ 应用程序
- 错误libc++.so:未定义对"_Unwind_GetRegionStart"的引用
- clang链接.so库libc _共享
- 如何在使用旧版本gcc的系统上动态链接到libc.so.6、libstdc++.so.6的本地副本
- linux error with libc.so.6
- 编译 fortran 文件"/usr/bin/ld: errno: TLS definition in /lib/libc.so.6"
- /lib64/libc.so.6 的标准解决方案:未找到版本"GLIBC_2.14"
- 从新发行版和不同发行版加载LD_PRELOAD libstdc++.so.6和libc.so.6时出现浮点异常
- G++ libc.so 绝对路径交叉编译错误
- Linux 和 C/C++ :通过链接 libc-2.11 并尝试在具有 libc-2.5.so 的 Linux 机器上
- 使用-static libgcc-static libstdc++编译仍然会导致对libc.so的动态依赖
- java.lang.UnsatisfiedLinkError: dlopen failed: 找不到库"libc++.so"
- [链接libc.so.6/libstdc++.so.][使用旧版本]
- bad_alloc from libc.so.6 C++
- C : /lib64/libc.so.6:找不到版本"GLIBC_2.11"(C 需要)