2012-01-28 84 views
4

导入DLL到Eclipse Java项目,我查了 “的java.library.path”DLL导入到Eclipse Java项目

String path = System.getProperty("java.library.path"); 
System.out.println(path); 

其中path值等于C:/Windows/System32。因此我在C:/Windows/System32中保存了myAPI.dll。然后我打电话System.loadLibrary

System.loadLibrary("myAPI.dll"); 

,并得到了错误信息:

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: myAPI.dll 
    at java.lang.Runtime.load0(Unknown Source) 
    at java.lang.System.load(Unknown Source) 

顺便说一句,我试图把我的DLL文件在在path提到不同的其他目录。但每次我收到相同的错误信息。如何解决这个问题呢?

+2

你的意思'system32'? – cha0site 2012-01-28 12:20:31

+0

http://stackoverflow.com/questions/4691095/java-loading-dlls-by-a-relative-path-and-hide-them-inside-a-jar – 2012-01-28 12:21:39

+1

我找到了解决办法:System.loadLibrary(“myAPI “);而不是System.loadLibrary(“myAPI.dll”); – 2012-01-28 12:22:49

回答

5

请勿将“.dll”放在库的末尾。这是一个特定于Windows的扩展,并且您的调用将在其他扩展的其他系统上工作,因此将扩展插入是不正确的。只需加载“myAPI”,如果这是正确的名称和其他东西是广告,它会工作。

1

一种选择是尽量保持该DLL在Eclipse系统库中使用你的/ JRE/bin并能够在运行时配置的dll文件,通过将DLL中/ JRE/bin中

这是最简单的方法我可以找出答案。这对于me.Hopefully工作将帮助你:)

+0

这不适合我。其他想法? – ralphgabb 2015-07-14 07:52:44

0

如果DLL是在项目文件夹(例如,您的项目的一部分),即:

./prod/bin/myAPI.dll 

,并要执行程序/单元在eclipse中测试你可以配置运行你的程序的运行环境。转到“Preferences/Java/Installed JREs”,选择所需的JRE或JDK(注意:对于加载32位dll,您必须使用32位JRE,尽管您的主机系统是64位系统),请点击“编辑”。在框中“默认VM参数”中输入

-Djava.library.path="./prod/bin;${env_var:PATH}" 

这会增加你的DLL文件夹“刺/箱”系统路径的前面(不打扰,这不是永久,只为所选择的环境JRE)。

通过运行下面的代码,你可以验证系统路径进行了更新和DLL可以加载:

 String path = System.getProperty("java.library.path"); 
     System.out.println(path); 
     System.loadLibrary("myAPI");