JNA库路径似乎被忽略

问题描述:

我想为C++库在linux上为JNA指定库加载路径。 从java文档我调用我的程序时使用-Djna.library.path但JNA无法加载库。JNA库路径似乎被忽略

这是我如何调用该程序:

java -jar -Djna.library.path=/home/lib program.jar 

当我使用-Djna.debug_load=true我可以看到库路径和JNA试图找到库,路径是正确的,该库的名称也是正确的,但它不加载。 JNA将继续搜索库的资源路径,然后无法找到它。

当我把库放在当前目录(与program.jar相同的级别)时,JNA很高兴,并且库加载没有问题。

当我使用:

java -cp program.jar:/home/lib package.program 

JNA还加载正确的库。

有没有人知道为什么-Djna.library.path不起作用?是否因为我正在使用带有清单的jar应用程序文件?

任何有类似问题的人?

+1

您可以加入用于加载库的代码? –

+0

可能与此相同? http://*.com/questions/27829764/jna-native-library-dependencies-and-jar-extraction –

+0

其他地方的答案:DLL加载是由操作系统完成的,如果DLL存储在jar中,那么他们必须在可以加载之前将其提取到(Windows)文件系统的某处。 –

请注意,一旦您离开JVM,jna.library.path或java.library.path不再被考虑在内。

确保将LD_LIBRARY_PATH设置为指向libshared.so所在的位置。

更新:

看看此处查看如何使用代码共享库的作品:

https://github.com/mkowsiak/jnicookbook/blob/master/recipeNo023

+0

我不明白你的评论。你是说如果我像这样运行它 - > java -jar -Djna.library.path =/home/lib program.jar那么它不起作用,我必须使用LD_LIBRARY_PATH? – onLs

+0

是的,尝试一下。首先将LD_LIBRARY_PATH设置为您的文件所在的位置。此外,请仔细检查您的C++代码所依赖的所有库是否也可用于JVM。 – mko