案例二:傳遞參數給C代碼,並從其獲取結果html
注:這裏傳遞的參數是基本類型的參數,在C代碼中有直接的映射類型。java
此案例全部生成的全部文件以下:spa
(1)編寫案例二的Java代碼,以下:3d
這裏咱們定義了一個native方法,此方法用於計算兩數平均值。將兩個Java int類型的值傳遞給C代碼,使其計算並返回double值。而後輸出到標準IO流htm
注:這裏加載動態連接庫的方式,改成了loadLibrary,只需提供庫名便可,可是接下來在運行的時候,須要指定java.library.path,使其指向庫所在的目錄。blog
(2)編譯java代碼,並生成頭文件get
javac 命令有 -h 選項,即編譯並生成頭文件,-h 對應的參數,是頭文件生成的地址。這裏"."表示,在當前目錄下生成。編譯
生成的頭文件以下所示:變量
(3)編寫源文件。gcc
這裏C獲取到參數,並輸出到標準IO流,而後將計算結果返回給Java。
(4)利用gcc生成動態連接庫
因爲Java環境變量已配置,可直接引用。生成的動態連接庫名爲demo.so
(5)設置java.library.path,並執行Java程序
上例,經過java命令的-D選項設定運行時庫路徑,可是仍然提示"找不到"demo2動態庫。
經查閱,發現,在Linux系統中,共享庫(也就是放入java.library.path路徑下的動態庫)必須符合這樣的規範:
Java代碼:System.loadLibrary("XXXX");
庫文件名:libXXXX.so
在Linux系統下共享庫必須有lib做爲前綴
故修改demo2.so的文件名爲libdemo2.so,並再次執行Java程序
成功傳參,並返回計算結果。