如何从Linux上运行的Java应用程序加载本机库(.dll)?

拉杰:

我在ubuntu中有一个Java应用程序,Java应用程序使用了jar。此jar使用一些本机库(.dll)。

System.loadLibrary("my_native_library") 在jar中用于加载所需的库。

在linux中,它尝试加载.so文件意味着在这里my_native_library.so,但是我有my_native_library.dll。

因此,我无法运行此Java应用程序。

我应该如何进行?

路易斯·科罗拉多州:

如果您的.jar文件包含一些.dll问题,则问题在于它具有使用JNI(Java本机接口)的多个模块,并且可以根据不是用Java编写的代码,而是使用另一种系统特定语言编写的代码来解决某些问题。

Windows中的共享对象打包在带有扩展名的文件中,.dll而Linux中的等效对象打包在一个共享对象中,其中扩展名的文件打包在.so.xxx.yyy其中xxx和yyy是标识共享对象版本的数字。

Linux和Windows可执行文件不可互换,这意味着您.jar最有可能.jar也可以在linux中运行该文件,除非该文件还包含.so可应对linux执行的文件。

编辑

通常,如果您希望可执行JNI的jar文件可执行,则在jar可用之前,需要进行一些安装。Windows通常会在某些Windows目录中安装dll,或者,如果尚未完成安装,它会使用PATH环境变量来定位dll(因此,通常,程序会将dll与应用程序可执行文件放在同一位置)Linux具有完全记录的搜索共享文件的方式对象(ldconfig有关说明,另请参见手册ld.so),其中涉及系统库和用户共享的对象。

无论如何,jar文件仅使用CLASSPATH环境来定位.class文件,并且您需要使(从jar中提取)共享对象对使用中的系统加载程序可见。因此,安装 JNI共享对象的最好方法是从.jar文件中提取它,并将其放在OS搜索引擎将在其中定位的目录中(两个系统都不同)

请注意,Windows和Linux JNI加载程序需要库对象的通用名称,它们会依赖于系统,以完成共享库名称。这意味着对于名为like myshared的共享库,您需要myshared.dll在Windows系统和myshared.solinux中调用共享库(我不确定,但是您可以通过试用和失败轻松地找到它,并查看System类和System#loadLibrary(String)文档)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SonarQube-无法加载包装程序的本机库“ wrapper.dll”

启动应用程序后立即加载动态链接的DLL

WindowsPE-如何运行电子应用程序,缺少dll

如何同时从Tomcat服务器上的两个不同的SpringBoot应用程序加载DLL?

从类库(DLL)运行WPF应用程序

从应用程序获取显式加载的DLL的符号

在Linux上的dotnet应用程序中从进程运行dotnet dll

运行时在同一目录(不是应用程序目录)中加载DLL

UnsatisfiedLinkError:运行播放应用程序时如何加载opencv本机库?

如何获得MSI(使用InstallShield)从应用程序安装目录加载Microsoft.Deployment.WindowsInstaller dll?

MVC4应用程序“无法加载DLL'libmp3lame.32.dll'

如何排除本机dll?

如何使我的应用程序加载正确的d3d9 * dll

如何根据应用程序正在运行的系统加载不同的本机库(dll,因此)

如何使用从Delphi DLL加载的窗体的应用程序图标

用Java加载.DLL

安装的应用程序无法加载MySQL.Data.DLL?

如何以DLL形式运行Page应用程序

在MFC应用程序上创建和使用Dll

附加库DLL无法由应用程序加载

C ++ dll上的COM dll

如何在本机应用程序中向C ++项目添加DLL引用?

将本机非托管 C++ DLL 加载到托管 C# 应用程序会导致 DLL 输出垃圾

如何在可以通过运行它的应用程序更改的 dll 中创建条件

Costura 未加载本机 Dll

无法从 .NetCore 应用程序中的 GAC 加载 dll

通过 C# 运行应用程序的 dll

引用 .Net Framework 4 dll 的 .Net 5 应用程序能否在 Linux 上运行?

在运行时加载本机 dll