我有一个java应用程序(tomcat-app),它在后台使用到C库的JNI连接。这个java应用程序以一种非常随机的方式崩溃。我在系统事件中看到,它是基于ntdll.dll崩溃的,它是Windows/System32中的系统库。
谁能告诉我,ntdll.dll提供了什么功能,它是用来做什么的,为什么java需要这个ntdll.dll?
我已经使用谷歌来寻找解决方案,但这种崩溃可能会发生在几乎所有的windows系统上,我是由许多应用程序组合而成的(似乎这不仅仅是windows-java的问题)。标准解决方案是重新安装/更新系统和/或应用程序。但是有没有一个解释,为什么这个ntdll.dll会制造这么多麻烦呢?
你认为,如果我把一个更高版本的库放到java目录或c- ntdll.dll目录中,这样java或c-lib就可以使用这个新版本,而不是Windows/system32-版本,这会有帮助吗?
非常感谢你的建议。
发布于 2018-06-14 02:03:11
ntdll是一个低级的windows系统api,它提供了数以百计的windows api函数,如内存管理、加载DLLs和系统异常。
您不能使用与您系统上的版本不同的版本,因为它是您运行的windows操作系统版本的紧密耦合/不可或缺的一部分。
如果没有进一步的信息,很难判断问题可能是什么,但可能是您在JNI包装器中使用了不正确的调用约定,这会导致堆栈不平衡。
发布于 2019-10-03 23:54:19
看起来,JNI调用是正确的(我们使用了一个外部库,这个库使用了JNI)。此外,我们已经找到了解决此问题的方法。Windows的功能更新提升了ntdll.dll的版本。这解决了问题;java.exe的崩溃再也没有出现过。
https://stackoverflow.com/questions/50843321
复制相似问题