我在Windows 10上安裝了MinGw,並按照一些聯機指令創建了一個JNI項目。雖然,我按照指示逐字,gcc找不到jni.h文件。但是該文件位於我的JAVA_HOME的/ include目錄中。下面是我發出的命令:如何在MinGw shell中使用%JAVA_HOME%環境變量
[email protected]/c/Users/sansari/Documents/source/java
$ set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_91
[email protected]/c/Users/sansari/Documents/source/java
$ echo %JAVA_HOME%
%JAVA_HOME%
[email protected]/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'
[email protected]/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.
[email protected]/c/Users/sansari/Documents/source/java
我想確保我知道,需要在地方的JNI項目的文件結構,並且還挖多一點關於如何從Exchange不同結構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-感謝;結果如下:
[email protected]/c/Users/sansari/Documents/source/java
$ export JAVA_HOME="C:\Program Files\Java\jdk1.8.0_91"
[email protected]/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添加到我的變量和我的路徑變量中。我仍然收到同樣的信息。我也重新啓動了機器。
[email protected]/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.
[email protected]/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.
它的工作!
[email protected]/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
[email protected]/c/users/sansari/Documents/source/java
$ ls
HelloJNI.c HelloJNI.class HelloJNI.h HelloJNI.java hello.dll
這聽起來更像是[SuperUser](http://superuser.com/)的主題。 – Turing85
MinGW外殼對變量使用不同的語法。例如'echo%PATH%'不能按預期工作。但是,'echo $ PATH'會。您需要使用POSIX shell語法'export VAR =「value」'而不是Windows/DOS語法'set VAR =「value」'。 –
@ Turing85-我很樂意將它移動,但這是一個關於編譯器配置以及如何構建java項目的問題。我覺得這是合法的。什麼程序員沒有遇到文件不可見的問題? – user3326293