我有一个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没有签名(以前从未必须签名),但我尝试使用我们的代码签名证书对其进行签名,看看是否与它有任何关系,但没有帮助
答案 0 :(得分:0)
首先将库文件放入应用程序中 目录。(即App Path)然后使用System.load(dll_name.dll)。它会 肯定成功。请检查您正在使用的操作系统。
所以Linux中的“.dll”会给出UnSatisfiedLinkError(反之亦然)。 然后还要检查处理器架构,如。
答案 1 :(得分:0)
这是一个晚期的后续行动,但问题的解决方案与AppSense有关。它默默地干扰了加载库调用,因为DLL被提取到临时目录并且违反了它们的策略。结果是库已加载但显示为空。
我们必须使用我们的代码签名证书(jar已经签署了)签署了dll,并且客户的AppSense团队必须添加规则以允许我们签名的DLL加载。
这是一个令人抓狂的问题。希望这个后续工作可以帮助其他人。