我已经获得了一个调用.dll在项目中使用的.jar。
如果我执行以下操作,我可以编译并运行没有问题:
这样API就可以了。
当我将生成的jar移动到另一台计算机时,虽然我将它包含在jar中,但它无法找到dll,因此该软件无效。
如何告诉生成的jar它需要的dll是什么?
我觉得他们发送给我的.jar只是调用了dll的函数,并假设你将目录添加到路径变量中。有没有办法让这项工作无需将路径配置更改为每个PC我移动jar?
我已经尝试过这里发布的答案(而且它们不起作用):
答案 0 :(得分:1)
问题是jar加载dll的方式。通常它只调用System.loadLibrary(<libname>)
,它希望本机库位于库搜索路径中。
如果要从其他地方加载它,则必须将DLL从JAR中提取到例如:临时目录或其他地方及其使用的负载
System.load(<absolute path to the dll file>)
;
注意:如果无法更改JAR中的类,则可以在执行JAR代码之前加载的第二个类中调用System.load(..)
。 AFAIR库只能由Java加载一次,因此如果已经加载了同名的dll,则只会忽略对原始JAR中System.loadLibrary()
的调用。