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应用程序文件?
任何有类似问题的人?
答
请注意,一旦您离开JVM,jna.library.path或java.library.path不再被考虑在内。
确保将LD_LIBRARY_PATH设置为指向libshared.so所在的位置。
更新:
看看此处查看如何使用代码共享库的作品:
https://github.com/mkowsiak/jnicookbook/blob/master/recipeNo023
您可以加入用于加载库的代码? –
可能与此相同? http://stackoverflow.com/questions/27829764/jna-native-library-dependencies-and-jar-extraction –
其他地方的答案:DLL加载是由操作系统完成的,如果DLL存储在jar中,那么他们必须在可以加载之前将其提取到(Windows)文件系统的某处。 –