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

JNA.LoadLibrary找不到本机库文件

罗河
2023-03-14

我已经用本机库包装器创建了自己的jar。结果jar的结构为:

library.jar
 |- com (there are my .java classes)
 |- libs (there is the native - libmylib.so)
 |- META-INF

我按如下方式加载本机库:

MyLibClass instance = (MyLibClass) Native.loadLibrary("mylib", MyLibClass.class);

现在我想在其他项目中添加这个库并使用它。但是当我创建MyLibClass的实例时,我收到一个错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'mylib':
libmylib.so: cannot open shared object file: No such file or directory

我应该如何修复这个问题?

共有1个答案

左丘修齐
2023-03-14

正如“JNA入门”页面所指出的,

使您的目标库可用于您的Java程序。有几种方法可以做到这一点:

  • 首选方法是将jna.library.path系统属性设置为目标库的路径。此属性与java.library.path类似,但仅适用于由JNA加载的库。
  • 在启动VM之前更改相应的库访问环境变量。这是Windows上的PATH、Linux上的LD_LIBRARY_PATH和OSX上的DYLD_LIBRARY_PATH
  • 使您的本机库在类路径{OS}-{ARCH}/{library}下可用,其中{OS}-{ARCH}是本机库的JNA规范前缀(例如Win32-x86Linux-AMD64Darwin)。如果资源在jar文件中,则在加载时会自动提取。
 类似资料:
  • 我维护了无数个tomcat实例,但现在我遇到了一个以前从未遇到过的问题。 我得到了一条众所周知的日志消息,其中tomcat抱怨它在D:\Programme\Apache Software Foundation\tomcat 7.0\bin:中找不到本机库: web上充满了愚蠢的试错方法,而tomcat文档没有明确描述在什么情况下不将本机库放在bin-folder中。 其他信息: Apache To

  • 今天我发现了一些项目,演示了android ndk编程。这是这个项目 我正在尝试启动DroidBlaster项目。我已经编译了所有本机库,没有错误。结果如下: 我只是做了一些小的改变: 1). 添加到<code>AndroidManifest中的<code>应用程序选项<code>android:hasCode=“true” 2).我从本地activity扩展并加载activity的< code>

  • 当我试图在模拟器x86-64上运行我的项目时,我遇到了崩溃。我试过很多不同的解决办法,但没有人帮助我解决我的问题。 Engine ;Mobile:本机库加载失败:java.lang.unsatifiedLinkError:dalvik.system.pathClassLoader[DexpathList[[zip文件“/data/app/package-name-1/base.apk”],nati

  • 当我试图在仿真器x86-64上运行我的项目时,我遇到了崩溃。我试过很多不同的解决方法,但没有人帮我解决我的问题。 工程 ;移动:本机库无法加载:java.lang.UnsatisfiedLinkError:Dalvik.System.PathClassLoader[DexPathList[[zip文件“/data/app/package-name-1/base.apk”],NativeLibrar

  • 这是运行时的stacktrace。存在。 现在,我检查了我的文件夹,在文件路径中有一个 我目前使用的是TomcatV6.0、jre7并安装了JDK1.6.0_34 堆栈跟踪 在java.library.path:C:\Program Files\Java\JRE7\bin;C:\Windows\Sun\Java\bin;C:\Windows\System32;C:\Windows\ICLS客户端\

  • 问题内容: 我有一个带有本机函数的小型JNI文件,该函数将char数组转换为字节数组(因此我可以将其发送到我的C ++客户端)。 定义如下: 软件包名称(加载库的位置是: 并且该类中的本机deffiniton如下: 但是当调用ConvertString函数时,我得到以下错误: 问题可能是该类(communicationmoduleTCPIP)是可运行的类吗?我不在类中运行,并且具有以下定义(当我注