如何在 MinGw shell 中使用 %JAVA_HOME% 环境变量

How to %JAVA_HOME% environment variable in MinGw shell

我在 Windows10 上安装了 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 [=40= 交换不同的结构] 到本机代码,反之亦然。

我也这样试过:

$ 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

MinGW shell 对变量使用不同的语法 -- 为 POSIX shell 指定的语法。例如 echo %PATH% 不像在 Windows/DOS 命令 shell 中那样工作。但是,echo $PATH 会。

您需要使用 POSIX shell 语法 export VAR="value" 而不是 Windows/DOS 语法 set VAR="value".

在以后的会话中避免此步骤的替代方法是 add a new Windows user environment variable:

  1. 输入Windows+R.
  2. 键入 control sysdm.cpl,3 以打开 "Advanced system settings".
  3. 单击 Environment Variables 按钮。
  4. 单击顶部的 New 按钮(在英文版本中标记为 "User variables for <username>"。)
  5. 添加您的 JAVA_HOME 变量及其值。
  6. 在所有对话框中单击“确定”以保存更改。
  7. 打开一个新的 MinGW shell 并使用 echo $JAVA_HOME 进行测试。
  8. 您可能需要关闭所有 MinGW shell 甚至注销并重新登录才能使更改生效。