LoadLibrary冻结

我已经编译了一个JNI dll,我想使用System.loadLibrary加载到我的Java应用程序中。 这在Windows XP上使用MSVC ++ 2008 Express编译的dll非常好。

但是,在Windows 7上,我使用MSVC ++ 2010 Express编译dll(相同的选项,相同的处理器架构,相同的Java版本,只是不同的操作系统和编译器),应用程序将冻结loadLibrary调用。 没有错误信息,根本没有反应。 当我尝试jstack冻结过程时,它也冻结(没有输出,不终止)。 以pipe理员身份运行应用程序不能解决此问题。

DLL及其所有依赖项都位于java.library.path 。 事实上,当我删除它们时,Java应用程序会告诉我它们错过了,所以这个DLL必须已经被正确地初始化了,而其他的东西却没有成功。 然而,debuggingcertificate,实际上loadLibrary冻结的,之后什么也不做。

有人可以告诉我可能会发生什么吗?


更新

正如我在下面的评论中所说的,这个问题似乎越来越深入。 使用一个简单的C程序加载DLL的依赖关系之一已经使冻结发生,所以这一定是Windows API的某种问题,以及MSVC ++如何链接DLL(该依赖关系也由MSVC ++ 2010 Express链接) 。

你的DLL几乎肯定会调用一些试图从DLLMain()获取加载器锁的东西。

你所描述的是所谓的死锁,这些症状完全适合这个特定的问题。