我在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
答案 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:
control sysdm.cpl,3
以打开&#34;高级系统设置&#34;。Environment Variables
按钮。New
按钮(标有&#34;用户变量&lt; username&gt;&#34;在英文版中。)JAVA_HOME
变量及其值。echo $JAVA_HOME
进行测试。