我已经将一些 JNI Hook 编写到 C++ 库中,并为我的 Java 服务器项目创建了一些 DLL 文件。假设 DLL 和 jar 文件位于“C:/server”下的同一文件夹中
我正在使用以下方法访问这些 DLL 文件:
System.loadLibrary("someDLLFile");
在需要 C++ 代码的类中。
我遇到的问题是,当我在自己的机器上运行这个服务器时,无论我将“服务器”文件夹放在哪里,一切都正常。但是当我把它交给同事测试时,他们不断得到:
java.lang.UnsatisfiedLinkError no someDLLFile in java.library.path
我希望 DLL 文件与 jar 文件位于同一文件夹中,并且不希望有人配置其 PATH 变量。
为什么 System.loadLibrary() 在我自己的机器上工作而不管文件夹的位置,但在另一台电脑上却不行?
最佳答案
之所以有效,是因为 DLL(或它所依赖的 DLL,即 msvcr90.dll 或其他东西)在您机器上的 PATH 中,但不在另一台机器上。
要么设置 PATH env-var 或 java.library.path 属性以包含文件的目录,要么将 dll 存储在 java 默认找到它的位置(此处有许多选项,具体取决于部署策略和平台)。
关于java, System.loadlibrary ("someDLLFile") 获取未统计的链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1029559/