System.load返回成功后,来自本机方法的java.lang.UnsatisfiedLinkError

时间:2014-04-16 04:11:53

标签: java java-web-start loadlibrary

我有一个java web start应用程序,它将自身的dll提取到临时文件,并通过System.load加载它("完整\路径\到\ dll")。

成功完成。但是,当我尝试在该dll中调用本机方法时,我得到一个带有方法名称的UnsatisfiedLinkError。

这是一个Windows 7机箱,32位1.7.0_45(和_51)jre。除了1位客户的一些计算机外,这个相同的代码可以在其他任何地方使用。

据说帐户没有本地管理员权限(这是正常的)并且正在运行Microsoft安全中心Endpoint Protection。 MS EPP和Java的LoadLibrary调用之间是否存在冲突?如果有的话,我的google-fu无法找到它。或者还有什么可以解释这个问题?

起初dll没有签名(以前从未必须签名),但我尝试使用我们的代码签名证书对其进行签名,看看是否与它有任何关系,但没有帮助

2 个答案:

答案 0 :(得分:0)

  

首先将库文件放入应用程序中   目录。(即App Path)然后使用System.load(dll_name.dll)。它会   肯定成功。请检查您正在使用的操作系统。

  1. 对于Windows: - 库扩展名为“.dll”
  2. 对于Linux: - 库扩展名为“.so”
  3.   

    所以Linux中的“.dll”会给出UnSatisfiedLinkError(反之亦然)。   然后还要检查处理器架构,如。

    1. 86
    2. 64

答案 1 :(得分:0)

这是一个晚期的后续行动,但问题的解决方案与AppSense有关。它默默地干扰了加载库调用,因为DLL被提取到临时目录并且违反了它们的策略。结果是库已加载但显示为空。

我们必须使用我们的代码签名证书(jar已经签署了)签署了dll,并且客户的AppSense团队必须添加规则以允许我们签名的DLL加载。

这是一个令人抓狂的问题。希望这个后续工作可以帮助其他人。