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