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

时间:2016-05-19 22:46:01

标签: java c java-native-interface mingw

我在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会找到可执行文件。

Environment Variables我将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

1 个答案:

答案 0 :(得分:2)

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 以打开&#34;高级系统设置&#34;。
  3. 点击 Environment Variables 按钮。
  4. 点击顶部的 New 按钮(标有&#34;用户变量&lt; username&gt;&#34;在英文版中。)
  5. 添加您的JAVA_HOME变量及其值。
  6. 在所有对话框中单击“确定”以保存更改。
  7. 打开一个新的MinGW shell并使用echo $JAVA_HOME进行测试。
  8. 您可能需要关闭所有MinGW shell,甚至可以注销并登录以实现更改。