如何在MinGw shell中设置%JAVA_HOME%环境变量

4

我在Windows 10上安装了MinGW,并按照一些在线指南创建了一个JNI项目。尽管我完全按照指南操作,但gcc无法找到jni.h文件。然而,这个文件在我的JAVA_HOME的/include目录中。以下是我输入的命令:

sansari@DESKTOP/c/Users/sansari/Documents/source/java
$ set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_91

sansari@DESKTOP/c/Users/sansari/Documents/source/java
$ echo %JAVA_HOME%
%JAVA_HOME%

sansari@DESKTOP/c/Users/sansari/Documents/source/java
$ gcc -Wl, --add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o hello.dll HelloJNI.c
gcc.exe: error: unrecognized command line option '--add-stdcall-alias'

sansari@DESKTOP/c/Users/sansari/Documents/source/java
$ gcc -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o hello.dll HelloJNI.c
HelloJNI.c:1:17: fatal error: jni.h: No such file or directory
 #include <jni.h>
                 ^
compilation terminated.

sansari@DESKTOP/c/Users/sansari/Documents/source/java

我想确保我知道JNI项目所需的文件结构,并深入了解如何在JAVA类与本地代码之间交换不同的结构。
我也尝试过这种方式:
$ gcc -Wl,--add-stdcall-alias -I"\include" -I"\include\win32" -shared -o hello.dll HelloJNI.c
HelloJNI.c:1:17: fatal error: jni.h: No such file or directory
 #include <jni.h>
                 ^
compilation terminate. 

@Chrono Kitsune- 谢谢;以下是结果:

sansari@DESKTOP-/c/Users/sansari/Documents/source/java
$ export JAVA_HOME="C:\Program Files\Java\jdk1.8.0_91"

sansari@DESKTOP-/c/Users/sansari/Documents/source/java
$ gcc -Wl,--add-stdcall-alias -I"\include" -I"\include\win32" -shared -o hello.dll HelloJNI.c
HelloJNI.c:1:17: fatal error: jni.h: No such file or directory
 #include <jni.h>
                 ^
compilation terminated.

奇怪的是,我已经设置了java目录的路径并重新启动了机器。当我使用java命令时,shell会找到可执行文件。

环境变量 我将JAVA_HOME添加到我的变量和路径变量中。但我仍然收到相同的消息。我也重新启动了机器。

sansari@DESKTOP-/c/users/sansari/Documents/source/java
$ gcc -Wl,--add-stdcall-alias -I"\include" -I"\include\win32" -shared -o hello.dll HelloJNI.c
HelloJNI.c:1:17: fatal error: jni.h: No such file or directory
 #include <jni.h>
                 ^
compilation terminated.

sansari@DESKTOP-/c/users/sansari/Documents/source/java
$ gcc -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o hello.dll HelloJNI.c
HelloJNI.c:1:17: fatal error: jni.h: No such file or directory
 #include <jni.h>
                 ^
compilation terminated.

它运行成功了!

sansari@DESKTOP-/c/users/sansari/Documents/source/java
$ gcc -Wl,--add-stdcall-alias -I"$JAVA_HOME\include" -I"$JAVA_HOME\include\win32" -shared -o hello.dll HelloJNI.c

sansari@DESKTOP-/c/users/sansari/Documents/source/java
$ ls
HelloJNI.c  HelloJNI.class  HelloJNI.h  HelloJNI.java  hello.dll

这更像是一个SuperUser的话题。 - Turing85
MinGW shell使用不同的变量语法。例如,echo %PATH%不能按预期工作。但是,echo $PATH可以。您需要使用POSIX shell语法export VAR="value"而不是Windows/DOS语法set VAR="value" - user539810
@Turing85- 我很乐意将其移动,但这是关于编译器配置和如何构建Java项目的问题。我认为这是合法的。哪个程序员没有遇到文件不可见的问题呢? - user3326293
1个回答

3
MinGW shell使用不同的变量语法——指定为POSIX shell的语法。例如,echo %PATH%在Windows/DOS命令shell中不能正常工作。但是,echo $PATH可以。
你需要使用POSIX shell语法export VAR="value"而不是Windows/DOS语法set VAR="value"
一个避免在将来的会话中重复此步骤的替代方法是添加一个新的Windows用户环境变量
  1. 按下 Windows+R
  2. 键入control sysdm.cpl,3打开“高级系统设置”。
  3. 单击“环境变量”按钮。
  4. 点击顶部区域的“新建”按钮(在英文版中标记为“<username>的用户变量”)。
  5. 添加您的JAVA_HOME变量及其值。
  6. 在所有对话框上单击“确定”以保存更改。
  7. 打开一个新的MinGW shell并使用echo $JAVA_HOME进行测试。
  8. 您可能需要关闭所有MinGW shell甚至注销并重新登录才能生效更改。

同样的问题需要在GIT-windows msys控制台中全局公开一个变量,以便所有命令行工具都能看到它。使用export GOLANG=/c/projects/golang-repo/解决了这个问题。 - Whome
我可以回显JAVA_HOME,没有问题,但它不理解java命令。 - Yannick Mussche

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