2014年6月4日 星期三

在 eclipse 上開發 JNI:設定 CDT + MinGW 的操作環境

這篇是在記錄使用 eclipse 開發 JNI 時,在 eclipse 上如何開發 C/C++ 的程式(CDT)
以及在 eclipse 上如何建立 JNI 的關連,讓 C/C++ 的 JNI 程式可以透過 eclipse 完成開發。
主要參考對象是 [1-2],其中 [2] 是比較詳細的教學。

1、安裝 MinGW
MinGW 是個以 GNU 授權開源的 C/C++ 編譯器。其實去看裡面的東西,似乎包了很多有的沒的
但我對 C/C++ 非常不熟,所以也不太知道裡面有些什麼東西 XD。
然後要注意的是 SouceForge 上的 MinGW 裝起來是 32-bit 的編譯器,所以如果是 32-bit Windows 請看 1.1
如果是 64-bit 的 Windows 的話,請跳到 1.2。

1.1、32-bit Windows
如果網路環境沒有問題的話,是可以直接用 MinGW 線上安裝套件 [3] 去安裝 MinGW 的~。
在 [3] 的連結(官網上的下載連結,連到 SorceForge 中 MinGW 的專案首頁)中有 mingw-get-setup.exe 這個檔案可以下載
這是個線上安裝的套件,可以讓我們用 GUI 介面的方式選擇我們想安裝的東西,預設會安裝到 C:\MinGW。

安裝時我選擇的內容如下,基本上就是它寫說基本安裝需要的東西就全部勾選,其他的全都沒勾 XD:


裝完以後,還需要做一下環境變數的設定~
在系統環境變數中加入變數名稱「MINGW_HOME」,變數內容「C:\MinGW」(如果 MinGW 安裝時路徑有改,則請依照安裝的路徑做修正)。


接著在 PATH 變數的最後面加上這段路徑「%MINGW_HOME%\bin;%MINGW_HOME%\msys\1.0\bin;」

這些環境變數設定的目的是讓 eclipse 發現可以用 MinGW 作為 C/C++ 編譯器,正確設定的話,eclipse 在建立 C/C++ 專案時就可以選擇使用 MinGW 作為編譯器。

1.2、64-bit Windows
對於 64-bit 的 Windows,因為必須安裝 64-bit 的 MinGW 編譯器,因此要安裝 mingw-w64 [5]。
安裝過程比安裝 MinGW 簡單多了,它就是一個安裝檔,什麼也不用選就會把所有的東西都裝進去。
裝完以後跟 1.1 一樣需要設定環境變數 MINGW_HOME 和 Path,只是設定的路徑不太一樣
以我這次的安裝來說,mingw-w64 安裝路徑為 C:\Program Files\mingw-w64,不過 MinGW 又在更裡面的路徑
因此 MINGW_HOME 的值在我這裡要設為「C:\Program Files\mingw-w64\x86_64-4.9.0-win32-seh-rt_v3-rev2\mingw64;」
而 PATH 則只需要加上「%MINGW_HOME%\bin;」即可,因為 mingw-w64 的資料夾裡沒有 msys....XD

設定完之後,eclipse 上應該就能夠正常編譯出 64-bit 的 dll 了。

2、安裝 eclipse CDT
CDT 是 eclipse 用來開發 C/C++ 的外掛套件,裝了以後就可以用 eclipse 開發 C/C++ 了。
安裝方法可以直接參考官方網站 [4],跟一般 eclipse 的套件安裝方法一樣,透過 [Help] → [Install New Software..] 安裝即可。

設定 C/C++ 專案中的 JNI 環境
在網路上搜尋 JNI 相關的文章時,大概都會看到一段要使用 javah 產生 C/C++ 的標頭的部分,實際執行後產生的標頭檔是 *.h 的檔案
但用 eclipse CDT 產生 C/C++ 專案時,並把標頭檔放進專案內開啟時,可能會看到類似這樣的狀況:





這個原因是因為 eclipse 的編譯器還不知道要去哪裡找 jni.h 和 jni_md.h
解決方法的話,在 [1] 中是透過設定環境變數「C_INCLUDE_PATH」跟「CPLUS_INCLUDE_PATH」來解決
不過我自己做的時候不知道為什麼一直失敗,eclipse 還是無法識別 JNI 的標頭
所以最後是改採用 [2] 的方法,直接自行在專案屬性上指定函式庫的路徑位置。

自行指定的作法是在 C/C++ 專案上按右鍵 → [Properties] → [C/C++ General] → [Paths and Symbols]
視窗上方的 Configuration 可以改成 [All Configurations] 套用給所有同樣類型的專案,以後就不用一直重複設定。
這裡假設專案是 C 的專案~先在左邊的窗格中選擇 GNU C,然後右邊按 [Add...] 把 JDK 安裝路徑的 \include 和 \include\win32 兩個資料夾分別加入,如下圖:


點選 Apply 後,C/C++ 專案的 include 就會改變了,如圖:(上圖是原來的樣子,下圖是做了上面的增加 Path 的動作後)



然後再回去看標頭檔,原本的錯誤應該就都消失了!

參考資料:
1、手把手教你通过Eclipse工程配置调用JNI完全攻略
2、Eclipse+MinGW编写JNI
3、MinGW - Minimalist GNU for Windows
4、eclipse CDT Downloads
5、GCC for both x64 & x86 Windows!

沒有留言: