我已经构建了Mecab.dll使用 Visual Studio 2017 社区构建工具,并能够使用 JNI 在 Java 中加载。当我将 DLL 复制到其他计算机并尝试在 java 中加载时,它确实有效。
Dependency Walker 显示它使用了 Visual Studio Build Tools 中的一些 DLL 文件,这些文件在另一台计算机上不可用,因为它不是开发计算机。
如何构建 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/