Ubuntu 14.04 Eclipse JNI環境搭建(一)之生成JNI標頭檔案
軟體環境
- ubuntu 14.04
- eclipse for Java
- CDT
建立Java工程
建立一個空Java工程,並建立HelloJni.java類。編寫好HelloJni.java類後,需要通過javah命令生成標頭檔案(HelloJni.h)。
生成標頭檔案
根據*.java類生成對應的JNI標頭檔案*.h,需要使用Java的javah命令,首先我們要檢查是否JDK已經安裝,javah命令是否存在?
使用“which javah”或“whereis javah”命令查詢javah檔案的安裝目錄,如果JDK已經正確安裝,會打印出javah的安裝目錄。比如我的電腦顯示的就是“/usr/bin/javah”,其實呢,如果你使用資源管理器開啟這個目錄,會發現這裡的javah檔案只是一個超連結,真實的指向位置是“/usr/lib/jvm/java-7-openjdk-amd64/bin”。
如果“which javah”或“whereis javah”命令沒有返回任何資訊,則說明JDK還沒有安裝好,請安裝JDK。
簡單的執行javac或javah等java命令就知道JDK有沒安裝配置好:
如果沒有安裝JDK,會在執行java命令時提示你那些軟體中包含該java指令,以及如何安裝。比如此處,我是根據提示並選擇安裝openjdk-7-jdk。
JDK安裝好後,接下來就是需要配置eclipse的編譯環境,可以在eclipse中呼叫javah命令生成標頭檔案。
eclipse外部工具配置
點選如下圖中eclipse按鈕:
雙擊左欄的“Program”一項,會建立一個子專案,並按如下圖中填寫的資訊參考填寫:
第一項:Name。即編譯程式名字,可以隨意寫,但是既然我們配置的就是執行javah命令,所以直接命名為javah好了。
第二項:Location。即javah檔案所在的目錄,可以通過“which javah”命令檢視。
第三項:Working Directory。即編譯*.java檔案所生成的.class檔案存放在哪一個目錄,${project_loc}表示編譯的java檔案所屬的工程位置。
第四項:Argument。執行編譯命令時附加的引數,目的是在當前工程下的jni目錄下生成與java檔案同名的.h標頭檔案。
配置好後,點選“Apply”按鈕儲存設定,就可以選擇java檔案,並點選執行按鈕運行了,如下圖,注意是剛剛我們配置好的那個按鈕,如果你把滑鼠放在該按鈕上(注意不是三角形)就會提示你“Run javah”,點選這個按鈕。
點選“Run javah”按鈕後,滑鼠點選工程,按F5鍵重新整理工程列表,如果執行成功,會建立jni資料夾,並在該資料夾下建立了標頭檔案。如果執行失敗,會提示諸如上圖中紅色字的內容:“錯誤: 找不到 'HelloJni' 的類檔案。”意思是找不到HelloJni的class檔案。我們知道.class檔案一般是在工程下的bin目錄下的,我們去該目錄下面看一下,發現:
執行javah後,生成的類檔案在工程下的bin\classes\下,而剛剛我們配置的External Tools Configuration中的“Working Directory:”的內容是${project_loc}/bin/,即編譯後的類檔案是在工程的bin/目錄下,而實際生成的類檔案在bin\classes\資料夾下,所以eclipse才會報錯說找不到類檔案。問題找到了,解決起來就簡單了,把 External Tools Configuration中的“Working Directory:”的內容設定為${project_loc}/bin/classes即可。
如果執行javah時提示:
大意是變數引用了空白選項:${project_loc},但是${project_loc}時eclipse的自帶配置變數,怎麼可能為空呢,所以肯定是工程出現了問題,或髒資料導致的。所以要clean一下該專案工程。選中該專案工程,點選eclipse選單“Project——Clean...”,在彈出框中選擇清洗所有專案,或者清洗當前專案:
清除成功後,再次選中HelloJni.java,執行“Run javah”,就可以執行成功了,如下圖: