2013-03-22 24 views
3

(这可能是我正在犯的一个明显的错误,但是现在6个小时后我无法工作。 )sigar-amd64-winnt.dll ...无法引用它或将它与.jar捆绑在一起

我想在我的eclipse项目中使用sigar.jar获取CPU信息(现在只测试sigar API)。

它运行在eclipse没有问题:

  • 什么使得它在Eclipse的工作是把DLL在同一文件夹中
  • 我测试的sigar.jar添加路径的dll因为构建路径配置对话框中的“本地代码属性” 不起作用。
  • 在运行配置中添加vm参数也不起作用。
  • 我测试了在这两个地方放置2个假路径,只要我有 dll在与sigar.jar相同的文件夹中......它在eclipse中运行良好。

问题是当我尝试导出我的项目的可运行.jar文件。我想两两件事:

  • 我修改与捆NativeCode MANIFEST.MF文件:库/ SIGAR-AMD64-winnt.dll(我假设这里的路径是相对于项目文件夹) - >没有成功:
main starting!! no sigar-amd64-winnt.dll in java.library.path 
org.hyperic.sigar.SigarException: no sigar-amd64-winnt.dll in 
java.library.path 
     at org.hyperic.sigar.Sigar.loadLibrary(Sigar.java:172) 
     at org.hyperic.sigar.Sigar.<clinit>(Sigar.java:100) 
     at CpuData.main(CpuData.java:59) 
cpudata(sigar s) starting!!! cpuInfo() starting!!! 
Exception in thread 
"main" java.lang.UnsatisfiedLinkError: 
org.hyperic.sigar.Sigar.getCpuInfoList()[Lorg/hyperic/sigar/C puInfo; 
     at org.hyperic.sigar.Sigar.getCpuInfoList(Native Method) 
     at CpuData.cpuInfo(CpuData.java:103) 
     at CpuData.<init>(CpuData.java:29) 
     at CpuData.main(CpuData.java:59) 
  • 于是我决定把.dll文件在同一文件夹作为我project.jar,并在命令行中使用:JAVA -Djava.library.path =。/native/-jar C:\ cpu_usage_log \ cpu3.jar(我假设这里的路径是相对于包含p的文件夹roject.jar)......但同样没有成功:

Error: impossible to find or load the main class .library.path=..native

(我怀疑是我应该给一个主类名之后的第二个参数-Djava.library.path = /路/但我找不到那个假设的“主类”名称,或者网上的任何示例,指定这样的类别...是否是.dll中的主类?)

我不知道还有什么可以尝试在这一点上。我阅读了为他人工作的这两种解决方案,这让它更令人沮丧,因为我认为在阅读其他文章时我错过了或不明白的东西,而且我找不到(这是我第一次处理在Java项目中使用本地dll)。

+0

你是否设法解决了这个问题。我也有同样的问题。 – 2016-07-18 18:20:28

回答

2

对我来说,总是最好的修改Java加载库的方式。

通常您可以拨打System.loadLibrary("mylib");来搜索库路径中的库。

恕我直言,它是更好的加载库使用它的绝对路径。这可以让你实现你的程序自定义搜索逻辑:

// Extends the name to mylib.so or mylib.dll 
mylibname = System.mapLibraryName("mylib"); 

// Load the library via its absolute path 
System.load(new File(path, mylibname).getAbsolutePath()); 

注意,每个库只能被加载一次,因此,如果您加载库如上所示,System.loadLibrary("mylib");电话之后将被忽略,因为库已经加载。

+0

谢谢。它做到了。奇怪的是,我仍然得到终端中的“库未找到”错误 - 即使在主要的第一行被运行之前抛出 - 但一切都起作用。 'C:\ Users \ Nick> java -jar C:\ cpu_usage_log \ cpu_utilization_statistics_to_output file_csv.jar java.library.path中没有sigar-amd64-winnt.dll org.hyperic.sigar.SigarException:no sigar-amd64-在java.library.path中的winnt.dll at org.hyperic.sigar.Sigar.loadLibrary(Sigar.java:172) at org.hyperic.sigar.Sigar。 (Sigar.java:100) at CpuData.main(CpuData.java:67)' – Nick463 2013-04-01 23:36:42

相关问题