【问题标题】:JNI: vcvars32.bat gives me "Cannot open include file: 'stdio.h': No such file or directory"JNI:vcvars32.bat 给我“无法打开包含文件:'stdio.h':没有这样的文件或目录”
【发布时间】:2018-09-14 00:32:15
【问题描述】:

我正在尝试使用 JNI 将 .C 代码与我的 Java 项目集成。

尝试在 Visual Studio 2017 中使用 vcvars32.bat 生成 .dll 文件时,它给了我一条错误消息告诉我:

“C:\Program Files\Java\jdk1.8.0_151\include\jni.h(39): 致命错误 C1083: 无法打开包含文件: 'stdio.h': 没有这样的文件或目录”

我在我的 C 代码中删除了 stdio.h 库的包含,但它没有帮助。

我的命令是:

"cl -I"C:\Program Files\Java\jdk1.8.0_151\include" -I"C:\Program Files\Java\jdk1.8.0_151\include\win32" -LD "Factorial.c" -Fe"Factorial.dll""

【问题讨论】:

  • 你确定你的jvm是32位的吗?在 2018 年听起来很奇怪,即在大多数情况下你需要 vcvars64.bat
  • 我也尝试过 vcvars64.bat、vcvarsall.bat 甚至 VsDevCmd.bat,但不幸的是它也没有帮助
  • 好的,我们来做一些简单的nmake文件并检查一下:
  • 制作一个类似link: compile ln /DLL /LTCG /LIBPATH:"C:\Program Files\Java\jdk1.8.0_151\lib" OUT:factorial.dll msvcrt.lib kernel32.lib jvm.lib Factorial.obj compile: cl /c /nologo /GL /Zl Factorial.c /FoFactorial.obj 的文件并使用nmake 来构建它。 Nmake 手册docs.microsoft.com/en-us/cpp/build/nmake-referenceengr.iupui.edu/~dskim/downloadable/reference_Nmake.pdf
  • 我在我的 C 代码中删除了 stdio.h 库的包含,但它没有帮助。 你将无法编译 32- 或 64-没有标准 C 标头的位。您的 Visual Studio 安装可能有问题。您用于设置环境的 vcvars32.bat 文件的完整路径是什么?你能试试另一个吗?你能编译一个简单的“Hello World!”吗? Visual Studio GUI 中包含 #include <stdio.h> 的 C 程序?

标签: java c visual-studio java-native-interface


【解决方案1】:

经过一段时间的搜索和失败后,我不得不通过 VS13 vsvars32.bat 生成它,请注意 vsvars 不是生成 32 位 dll 的 VS17 的 vcvar,因为我的平台是 64 位,所以我必须安装并切换到 32 位 JVM问题就解决了。

【讨论】:

  • VS15 也可以。
猜你喜欢
  • 2017-07-04
  • 2013-11-05
  • 2014-05-07
  • 2017-02-22
  • 2013-11-01
  • 2017-03-31
  • 2015-11-11
相关资源
最近更新 更多