【发布时间】: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