2016-05-19 102 views
2

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

Environment Variables我將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 
+0

這聽起來更像是[SuperUser](http://superuser.com/)的主題。 – Turing85

+0

MinGW外殼對變量使用不同的語法。例如'echo%PATH%'不能按預期工作。但是,'echo $ PATH'會。您需要使用POSIX shell語法'export VAR =「value」'而不是Windows/DOS語法'set VAR =「value」'。 –

+0

@ Turing85-我很樂意將它移動,但這是一個關於編譯器配置以及如何構建java項目的問題。我覺得這是合法的。什麼程序員沒有遇到文件不可見的問題? – user3326293

回答

1

MinGW shell對變量使用不同的語法 - 爲POSIX shell指定的語法。例如echo %PATH%不能像在Windows/DOS命令行程序中那樣工作。但是,echo $PATH呢。

您需要使用POSIX shell語法export VAR="value"代替Windows/DOS語法set VAR="value"

的替代,以避免在將來的會話這一步是爲了add a new Windows user environment variable

  1. 類型視窗 + - [R
  2. 類型control sysdm.cpl,3打開「高級系統設置」。
  3. 單擊Environment Variables按鈕。
  4. 點擊New按鈕,在頂部(上面標有「用戶變量<用戶名>」的英文版本。)
  5. 添加您JAVA_HOME變量及其值。
  6. 在所有對話框上單擊確定以保存更改。
  7. 打開一個新的MinGW外殼並使用echo $JAVA_HOME進行測試。
  8. 您可能需要關閉所有MinGW shell,甚至註銷並登錄才能生效。
相關問題