我已经编译了一个 JNI dll,我想使用System.loadLibrary
. 使用 MSVC++ 2008 Express 编译的 dll 在 Windows XP 上运行良好。
但是,在 Windows 7 上,我使用 MSVC++ 2010 Express(相同的选项,相同的处理器架构,相同的 Java 版本,只是不同的操作系统和编译器)编译了 dll,应用程序将在loadLibrary
调用时冻结。没有错误信息,完全没有反应。当我尝试jstack
冻结进程时,它也会冻结(没有输出,没有终止)。以管理员身份运行应用程序并不能解决此问题。
DLL 及其所有依赖项位于java.library.path
. 事实上,当我删除它们时,Java 应用程序会告诉我它们丢失了,因此 dll 必须已正确初始化,而其他一些东西则失败了。然而,调试证明它实际上是loadLibrary
冻结的,之后什么也没有。
谁能告诉我这里可能发生了什么?
更新:
正如我在下面的评论中所述,这个问题似乎更深入。使用简单的 C 程序加载所述 DLL 的依赖项之一已经导致冻结发生,因此这一定是 Windows API 以及 MSVC++ 如何链接 DLL 的某种问题(该依赖项也由 MSVC++ 2010 Express 链接) .