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

如何让JNA从一个jar文件中提取几个DLL文件?

酆英达
2023-03-14
Looking in classpath from sun.misc.Launcher$AppClassLoader@15db9742 for /com/sun/jna/win32-x86-64/jnidispatch.dll
Found library resource at jar:file:/C:/MyNetBeansProject/dist/lib/jna-4.2.2.jar!/com/sun/jna/win32-x86-64/jnidispatch.dll
Looking for library 'MyLibrary'
Adding paths from jna.library.path: null
Trying MyLibrary.dll
Adding system paths: []
Trying MyLibrary.dll
Looking for lib- prefix
Trying libMyLibrary.dll
Looking in classpath from sun.misc.Launcher$AppClassLoader@15db9742 for MyLibrary
Found library resource at file:/C:/MyNetBeansProject/build/classes/win32-x86-64/MyLibrary.dll
Looking in C:/MyNetBeansProject/build\classes\win32-x86-64\MyLibrary.dll
Found library 'MyLibrary' at C:/MyNetBeansProject/build\classes\win32-x86-64\MyLibrary.dll
Looking in classpath from sun.misc.Launcher$AppClassLoader@70dea4e for /com/sun/jna/win32-x86-64/jnidispatch.dll
Found library resource at jar:file:/C:/SomeFolder/lib/jna-4.2.2.jar!/com/sun/jna/win32-x86-64/jnidispatch.dll
Looking for library 'MyLibrary'
Adding paths from jna.library.path: null
Trying MyLibrary.dll
Adding system paths: []
Trying MyLibrary.dll
Looking for lib- prefix
Trying libMyLibrary.dll
Looking in classpath from sun.misc.Launcher$AppClassLoader@70dea4e for MyLibrary
Found library resource at jar:file:/C:/SomeFolder/MyNetBeansProject.jar!/win32-x86-64/MyLibrary.dll

(我不知道这是否相关,但我应该提到,我的DLL依赖于JAR中同一文件夹中的多个其他DLL文件。不确定JNA是否会自动为我提取它们,但到目前为止,JNA似乎甚至没有提取我实际使用的DLL。)

编辑:查找jnidispatch.dll似乎没有问题。根据输出,当jna.debug_load.jna设置为true时,将在JAR中找到文件并将其解压缩到temp文件夹中。

共有1个答案

厍彭薄
2023-03-14

当无法加载dll时,JNA显示错误“UnsatisfiedLinkError”。如果您的DLL需要另一个系统路径中不存在的自定义DLL,它将失败,因为JNA不会自动提取该DLL。

JNA作为Java库不知道系统库的依赖关系,因此无法从JAR中提取。解决方案是指定JNA Java接口中的所有依赖项。

您可以在这里看到一个用JNA加载多个依赖库的示例

 类似资料:
  • 问题内容: 我需要在运行时复制一个打包在Jar中的文件夹。我想通过在同样包含在同一文件夹中的类中调用函数来实现。 我试过使用: 但这不起作用。我可能必须递归使用函数。有没有更优雅/前瞻的方式来做到这一点? 万一我必须递归地做它:1.我不想指定硬编码的文件,我想动态地做它2.我不想创建一个单独的档案。我希望此资源与处理该资源的类位于同一个Jar中 谢谢 我最后做了Koziołek的建议。尽管我希望有

  • 问题内容: 我对Json文件很陌生。如果我有一个包含多个json对象的json文件,例如: 我想将所有“时间戳记”和“有用性”提取到一个数据帧中: 有谁知道解决此类问题的一般方法? 问题答案: 使用json数组,格式为: 然后将其导入到您的python代码中 现在,数据的内容是一个带有字典的数组,字典表示每个元素。 您可以轻松访问它,即:

  • 我已经用Waffle开发了一个示例java web应用程序,用于SSO身份验证。我使用Waffle1.8和Tomcat8。我已经在我的开发环境(Java1.8、Tomcat8、Windows2012 R2服务器)中成功地运行并验证了它。但是当我在prod环境(与dev环境相同)中运行相同的应用程序时,它在试图访问URL时会出现以下错误: dll文件(com/sun/jna/win32-x86-64

  • 问题内容: 给定 档案的网址(例如zip文件) 该归档文件中文件的全名(包括路径) 我正在寻找一种创建该文件的本地副本的方法(最好使用Java), 而无需先下载整个档案 。 根据我(有限的)理解,这应该是可能的,尽管我不知道该怎么做。我一直在使用TrueZip,因为它似乎支持各种各样的档案类型,但是我对其使用这种方式的能力感到怀疑。有人对这种事情有经验吗? 编辑: 能够同时使用tarball和压缩

  • 问题内容: 我在JAR文件中有一个文件。这,例如。 我该如何访问?我的源代码是: 问题答案: 您不能使用File,因为此文件在文件系统上并不独立存在。相反,您需要getResourceAsStream(),如下所示:

  • 问题内容: 在Linux桌面(RHEL4)上,我想从大文件(> 1 Gig)中提取一定范围的字节(通常小于1000)。我知道文件的偏移量和块的大小。 我可以编写代码来执行此操作,但是有命令行解决方案吗? 理想情况是: 问题答案: 尝试: