我使用LoadLibrary()动态地将(服务器)jvm.dll加载到我的64位Visual Studio 2013 C ++应用程序中,以便使用JNI执行本机Java代码。
在VS调试器中,我正在加载dll时遇到一些访问冲突(但是如果我继续'继续'之后,事情似乎有效);然后在调用某些JNI调用时发生硬崩溃。我尝试过Java 1.7和Java 1.8中的jvm.dll,但问题相同。
我怀疑问题是运行时库不兼容。依赖性walker表示即使最新的jvm.dll依赖于msvcr100.dll(来自Visual Studio 2010)。我听到了使用不兼容的运行时版本后果的可怕警告;并在其他情况下亲眼看到了结果。
还有其他人遇到过这个问题吗?是否有针对Visual Studio 2013编译的任何版本的jvm.dll?
谢谢, 丹
答案 0 :(得分:0)
就在最近(2015年2月)我编译了一个JNI应用程序,它调用JVM来运行Java程序。我使用了最新的JRE版本(1.8.0_31)和Visual Studio 2013.我还在运行时加载了jvm.dll。如果您想了解我如何设置JNI呼叫,请查看this post。
所以有可能......
确保包含jvm.dll的JRE是为与Visual Studio项目相同的体系结构(32位或64位)构建的。如果您使用的是64位,则可能需要添加x64
作为配置。要做到这一点,请访问:
Solution --> Properties --> Configuration Properties
还要确保您的包含/库正确无误。 对于我的项目,我需要包含以下内容:
C:\Program Files\Java\jdk1.8.0_31\include
C:\Program Files\Java\jdk1.8.0_25\include\win32
另外,我需要添加位于以下位置的jvm.lib
C:\Program Files\Java\jdk1.8.0_31\lib
确保您还将jvm.lib
添加到链接器输入中。或者,您可以使用预处理器:
#pragma comment(lib, "jvm.lib")
希望这可以帮助您正确配置项目。如果您仍然有错误,我建议您完全卸载Java,然后重新安装。也许与Visual Studio 2013一样......