java - 复制到其他计算机时无法加载 DLL

标签 java windows dll java-native-interface

我已经构建了Mecab.dll使用 Visual Studio 2017 社区构建工具,并能够使用 JNI 在 Java 中加载。当我将 DLL 复制到其他计算机并尝试在 java 中加载时,它确实有效。

Dependency Walker 显示它使用了 Visual Studio Build Tools 中的一些 DLL 文件,这些文件在另一台计算机上不可用,因为它不是开发计算机。

enter image description here

如何构建 DLL,以便在不安装 Visual Studio/构建工具的情况下可以在任何其他计算机上使用它?我有 Java 背景,不知道如何做到这一点?有人可以帮忙吗?

最佳答案

我发现 Dependency Walker 经常会转移注意力。您还没有给我们足够的帮助,但我会提供一些可能对您有所帮助的理论:

  • 尝试安装 Visual Studio redist packages
  • 您已将 DLL 构建为“调试”版本。这通常无法移植到没有相同 Visual Studio 版本的系统,因为未安装支持的 DLL。
  • 您复制的 DLL 不受信任。查看文件是否被阻止,如果是的话unblock it
  • 您没有进行正确的 System.load() 或 System.loadLibrary() 调用来在其复制位置查找 DLL。不幸的是,这些方法可以报告成功,但仍然无法访问您的 native 方法。
  • 您尚未将 DLL 放入 PATH 中。

希望其中之一能够帮助您摆脱困境。如果没有,请发布您的错误堆栈跟踪和消息,以便我们为您提供帮助。

关于java - 复制到其他计算机时无法加载 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53920795/

相关文章:

java - 递归绘制

java - 提取查询结果时出现问题

python - 在 Windows 上运行 Linux 虚拟机的建议

windows - 在 Cordova Windows Universal App 中使用 Edge Chromium 作为 Webview

c++ - 为 std::string 释放内存的异常(尝试在 UE4 中使用 YOLO/Darknet)

c# - C#中的命名问题

javascript - 我可以在 json 响应中发送 java 对象吗

java - servlet [] 的异常 org.apache.catalina.core.ApplicationContext.log Servlet.init() 引发异常 java.lang.IllegalArgumentException

C++ 获取 Process.GetCurrentProcess().SessionId

r - 从 Rstudio 增加 R Ubuntu 中的最大 DLL 数