Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.UnsatifiedLinkError-本机方法问题_Java_Dll_Java Native Interface_Agents Jade - Fatal编程技术网

java.lang.UnsatifiedLinkError-本机方法问题

java.lang.UnsatifiedLinkError-本机方法问题,java,dll,java-native-interface,agents-jade,Java,Dll,Java Native Interface,Agents Jade,我在Java(Eclipse)中遇到了一个关于DLL使用的问题。到目前为止,我遇到以下问题: Uncaught Exception for agent SomeAgent java.lang.UnsatisfiedLinkError: SomePackage.SomeClass.SomeNativeMethod(II)Z [...] at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:344) at jade.core.

我在Java(Eclipse)中遇到了一个关于DLL使用的问题。到目前为止,我遇到以下问题:

Uncaught Exception for agent SomeAgent 
java.lang.UnsatisfiedLinkError: SomePackage.SomeClass.SomeNativeMethod(II)Z
[...]
at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:344)
at jade.core.Agent$ActiveLifeCycle.execute(Agent.java:1532)
at jade.core.Agent.run(Agent.java:1471)
at java.lang.Thread.run(Thread.java:745)
我不知道这是否有助于解决问题,但我也在这个项目中使用JADE

编辑(2014年4月28日):

我尝试使用的dll是一个自定义dll(由我工作的公司的一位前员工创建)

这个问题的奇怪之处在于,我有两个java项目,它们执行类似的任务。其中一个项目运行良好,而另一个项目遇到了
未满足的链接错误

关于路径:我已经为DLL创建了一个特定的文件夹,它包含在工作区文件夹中,但不在项目文件夹中(换句话说,在相同的文件夹中,
bin
src
bibs
设置
,等等)。对于我拥有的两个项目,此文件夹的配置是相同的。另外,我已经测试了
System.out.println(System.getProperty(“java.library.path”)
方法,在这两种情况下都返回了正确的路径

编辑(2014年4月29日):


刚刚添加了一些有关错误消息的附加信息。我开始认为问题可能与JADE的使用有关…

这可能是由于库的版本不匹配或位不匹配。您可能正在使用64位操作系统,请使用64位兼容版本的JAR文件。另外,请检查JARS.

当您使用某个本机库时,您的系统将在环境变量和java.library.path.system属性中检查它,如果在那里找不到它,则将抛出java.lang.unsatifiedlinkerror。Windows从system32中选取dll,因为system32文件夹已存在于路径中,因此从该sid中发生的错误更改非常少e、 本机库使java代码依赖于平台。请检查java路径中所需的dll。检查java.library.path,并尝试使用System.loadLibrary(“库名”)加载库(不带dll扩展)。希望获得此帮助。:)

以下是一个PD过程,可以帮助您识别问题

将以下内容添加到程序中,以确定两个运行时环境之间的arch和load路径的差异。调查路径/拱的任何差异

 System.out.println(System.getProperty("java.library.path"));
 System.out.println(System.getProperty("sun.arch.data.model"));
您可以使用dumpbin.exe实用程序来标识正在加载的DLL所需的依赖项。 确保依赖项存在。 用法示例:

C:> dumpbin /imports your.dll 

Dump of file your.dll
File Type: DLL
  Section contains the following imports:
    **KERNEL32.dll**
C:>where KERNEL32.dll
    C:\Windows\System32\kernel32.dll
可以使用where.exe命令查找依赖项的位置。 用法示例:

C:> dumpbin /imports your.dll 

Dump of file your.dll
File Type: DLL
  Section contains the following imports:
    **KERNEL32.dll**
C:>where KERNEL32.dll
    C:\Windows\System32\kernel32.dll
如果你看到:

C:>where KERNEL32.dll
    INFO: Could not find files for the given pattern(s)
调查从属DLL不在路径上的原因

您可以使用dumpbin.exe命令检查64位对32位。
例如:

C:>dumpbin/d.dll
转储文件yourd.dll
找到PE签名
文件类型:DLL
文件头值
14C计算机(x86)转储bin/d.dll
转储文件yourd.dll
找到PE签名
文件类型:DLL
文件头值

8664机器(x64)与这里的几个答案相反,这不是库加载问题。查看堆栈跟踪。查找异常中命名的方法时出现问题。这是由于实际名称与预期名称不匹配造成的。流行原因:

  • 不使用javah生成.h文件
  • .h和.c/.cpp文件中的方法签名不一致
  • 在.c或.cpp文件中不包括.h文件
  • 运行javah后更改Java类的包或名称
  • 运行javah后更改方法名称或签名

如果执行最后两种操作之一,则必须重新运行javah并调整.c/.cpp文件,使其与新.h文件中的新签名一致。

此类错误通常由程序中的库引起。这是自定义DLL还是标准DLL?DLL是否在库路径中?您是否在eclipse中添加了库@Mudkip:检查java的路径,并使用java-Djava.library.path=“dll path here”运行应用程序。只需编辑文本。提前谢谢!嗯,我测试了你推荐的所有东西,看起来bits兼容性没有问题。然而,我只是注意到有一些与jade相关的错误消息(参见我今天的版本)。问题可能与翡翠与环境不相容有关?