Code Bye

Java程序调用动态库的问题,Cant find dependent libraries

win7 32位系统上,java程序调用Qt写的动态,Qt build的时候没报任何错。
System.load()的时候报错Can””t find dependent libraries。

我用depends.exe 这个工具查看DLL信息,开始的时候确实报错说有几个依赖的动态找不到,我就在网上下载了放到system32目录下。depends不报错了(但是有一个警告:At least one module has an unresolved import due to a missing export function in a delay-load dependent module,我在官网上查到说这个警告可以忽略:http://www.dependencywalker.com/faq.html)

但是java程序运行时还是有Can””t find dependent libraries的错误。

求解决。


20分
缺少依赖的lib
问题进展:
我把动态放到jre的bin目录下后Can””t find dependent libraries 的错误没有了,出现了新的错误 java.lang.UnsatisfiedLinkError: <我的写的方法名>  ,我反复确认了动态库的方法和java的native方法名和参数没有问题, 有人吗?
引用 1 楼 Willowgao 的回复:

缺少依赖的lib

已经用dependency walker查看了缺少的dll,并在网上下载放到system32 中了,而且dependency walker中已经没有缺少依赖的错误了。

还有别的方法查看缺少依赖的库吗?

问题进展:
已经可以调用了。
解决方法: 将javah的.h和.cpp文件中方法名 JAVA_balabla改成_JAVA_balabala ,虽然这两个文件中都有类似“别修改这个文件,这是机器生成的”,但是改完就对了,我也不知道为什么。修改前请备份源文件。

那么问题又来了,之前我将DLL文件放到jre/bin中,然后用load(绝对路径)方法加载。但是我的程序要给别人用,也不能每次都这样做,怎么加载我指定目录下的dll文件呢?


20分
通过  -Djava.library.path 变量指定dll路径 为当前目录的dll目录。。
%javaexec%  -classpath “.;.\classes;%~dp0bin” -Djava.ext.dirs=”%~dp0lib”   -Djava.library.path=”%~dp0dll”  chrriis.dj.nativeswing.swtimpl.demo.examples.webbrowser.Ati4vod
更新:
4楼的问题已经解决。

load()的参数,dll的路径中只写了文件名 像这样 c:\123\456      改成c:\123\456.dll 就对了。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Java程序调用动态库的问题,Cant find dependent libraries