当前位置: 首页 > 知识库问答 >
问题:

System.loadLibrary(...)在我的情况下找不到本机库

安明亮
2023-03-14
  static{
    System.loadLibrary("calculate");
  }

当我运行我的新android项目时,我得到了错误:

java.lang.UnsatisfiedLinkError:  ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"

因此,正如error所说,复制的本机库不在/verdor/lib或/system/lib中,在我的情况下如何解决这个问题?

(我解压缩了apk包,在lib/there libcalculate.so下面)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so

但是当我运行我的应用程序时,同样的错误抛出:

java.lang.UnsatisfiedLinkError:  ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"

共有1个答案

卓俊晖
2023-03-14

为了从根本上解决问题(也许同时解决问题),以下是您可以做的:

>

  • 删除jni文件夹和所有。mk文件。如果你不编译任何东西,你就不需要这些,也不需要NDK。

    libcalculate.so文件复制到 /libs/(armeabiarmeabi-v7ax86...) 中。使用Android Studio时,它是 /app/src/main/jnilibs/(armeabiarmeabi-v7ax86...) ,但我看到您使用的是Eclipse。

    在您所拥有的nativeLibraryPath或LegacyNativeLibraryDir/armeabi上运行ls,以检查您的libcalculate.so是否确实存在。

    如果存在,请检查它是否没有从原来的libcalculate.so文件中修改:它是否按照正确的体系结构编译,是否包含预期的符号,是否缺少依赖项。您可以分析libcalculate.so使用readelf。

    为了检查步骤5-7,您可以使用我的应用程序而不是命令行和Readelf:Native Libs Monitor

    AAR中的JNI/CPU_ABI

    最终APK中的lib/cpu_abi

    在<5.0设备上的应用程序的nativeLibraryPath中,在>=5.0设备上的应用程序的LegacyNativeLibraryDir/cpu_arch中。

  •  类似资料:
    • 我想从另一个Android项目中使用一个现有的原生库,所以我只是将NDK构建的库(libCalculate.so)复制到我的新Android项目中。在我的新Android项目中,我创建了一个文件夹并将libcalculate.so放在那里。没有JNI/文件夹。我的测试设备具有ARM架构。 在我的java代码中,我通过以下方式加载库: (我解压缩了apk包,在lib/下面有libcalculate.

    • 问题内容: 我正在使用nodejs和expressjs框架从服务器下载文件’jsonFile.json’。 我正在使用以下代码 但这会导致对整个文件内容的响应。 我期望浏览器要我将文件保存在本地磁盘中。 如何将文件保存在本地磁盘中? 问题答案: 让Express设置正确的标头,然后执行以下操作: (doc) 编辑: 由于您是通过AJAX调用进行请求的,因此您必须更改设置,因为大多数(全部?)浏览器

    • 问题内容: 我使用 CMake* (3.4.1)根据 Boost 库构建一个C ++项目。宿主平台是 Linux ,目标是宿主和 交叉构建 Android NDK。 * 我只使用Boost头文件,而我只是下载/提取了boost文件夹(并且我没有目录)。 在我的文件中,我这样声明对Boost的依赖关系: 我将构建配置如下: 这实际上 可以 像我的 本机 版本一样工作。 现在,当我以完全相同的方式(仅

    • 问题内容: 我在(数据库中)使用列。实际上,我使用类似 如果没有本机查询机制,是否可能像这样进行查询?(如findBy) 在此先感谢您的帮助 ;) 问题答案: 我解决了我的问题。 我找到了DQL的扩展名。

    • 我的老师想让我通过迭代找到用户10个输入的中位数。 这就是我使用迭代来查找总和,奇数数,最大值和质数数的方式。但我一直坚持要找到中位数。

    • 问题内容: 我有一个2的幂的整数输入(1、2、4、8等)。我希望函数不使用log()返回位位置。例如,对于上述输入,对于C#,将分别返回{0,1,2,3}。另外,如果可以在SQL中完成。 谢谢! 问题答案: 我发现执行此操作最快的代码来自Bit Twiddling Hacks网站。具体而言,基于DeBruijn序列的查找。参见http://graphics.stanford.edu/~seande