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