致命错误:jni.h文件不存在

4
我将尝试在Windows上重现这个教程: Java Native Interface (JNI) 当我尝试编译时,出现以下错误:
fatal error: jni.h: No such file or directory

 #include <jni.h>

compilation terminated.

我的命令行是:

gcc -Wl,--add-stdcall-alias -IC:\Program_Files\Java\jdk1.7.0_45\include -IC:\Program_Files\Java\jdk1.7.0_45\include\win32 -shared -o hello.dll HelloJNI.c

我编译的文件夹是所有文件所在的文件夹。

我确定这个文件夹中有文件"jni.h"。

C:\Program Files\Java\jdk1.7.0_45\include

有人知道为什么导入语句不起作用吗?

谢谢!


可能是重复问题:jni.h: no such file or directory - Eel Lee
2
你的陈述是 jni.hC:\Program Files\Java\jdk1.7.0_45\include 中,但是你的编译命令行指定了 -IC:\Program_Files\Java\jdk1.7.0_45\include。你的 gcc 是否会自动将下划线转换为空格? - mah
x86_64-w64-mingw32-gcc -I"C:\Program Files\Java\jdk1.8.0_151\include" -I"C:\Program Files\Java\jdk1.8.0_151\include\win32" -shared -o hello.dll HelloJNI.c 对我有用 - Anand Kadhi
2个回答

8

下划线不同于空格。如果jni.h 真的在 "program files" 目录下,您应该使用以下命令:

gcc -Wl,--add-stdcall-alias -I "C:\Program Files\Java\jdk1.7.0_45\include" -I "C:\Program Files\Java\jdk1.7.0_45\include\win32" -shared -o hello.dll HelloJNI.c


这就是为什么我从来不会把任何东西安装到“C:/Program Files”目录下。 - Ingo
1
我甚至没有“C:/Program Files”目录 :D - Joni
我敢打赌你一定有过这样的经历——即使资源管理器显示为“C:\Programme”或其他类似的路径,也并不意味着它不存在。Windows 在这方面做了很多黑魔法。我希望他们能够解雇那个设计所有“程序文件”、“自己的文档”等垃圾的白痴,采用NTFS中合理的符号链接,并忘掉任何和所有“魔法”路径名。更好的方法是采用真正的文件系统,让NTFS垃圾消失。(见鬼,他们仍然不区分大小写!) - Ingo
你似乎假定我一开始就使用Windows。 - Joni
在这种情况下,你当然是干净的。当然,像 OP 这样进行更深入的开发的人,不应该在 Windows 上进行开发,以确保安全。 - Ingo
显示剩余2条评论

1
我得到了答案:
我只需要使用引号,用斜杠替换反斜杠,并用空格替换下划线。
命令看起来像这样:
gcc -Wl,--add-stdcall-alias -I"C:/Program Files/Java/jdk1.7.0_45/include" -I"C:/Program Files/Java/jdk1.7.0_45/include/win32" -shared -o hello.dll HelloJNI.c
感谢大家!!

对于 Linux 环境,它会是什么? - CoDe
在Linux中与Windows不同。我从未尝试过,但也许可以尝试一下这个教程。https://dev59.com/GG865IYBdhLWcg3wKLb6 希望这有所帮助。 - anmi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接