HobNote_board.png
Java関係[04]
since 2016.03.13
last update 2016.03.13



javaからJNAを使ってgccの共有ライブラリsoを利用する(引数、戻り値無し)

javaからgccで生成した共有ライブラリを利用するのにJNAを使うのがいいらしい
JNAは、Java Native Accessの略でコミュニティ開発ベースのlibraryでJavaプログラムからOSのnative共有ライブラリに
アクセスできるらしい。つまりLinux/Mac/Unixならsoファイル,windowsならdllファイルをJavaから使うことができることになる。

まず、GitHubからjnaのファイルを取ってくる。URLは、
で、2016.03.12時点では右側の上よりちょっと下あたりにある[Download ZIP]ボタンで
jna関係一式DLする。
DLしたファイルはjna-master.zipで適当なディレクトリに解凍する。
ここで使いたいfileは、jna.jarで解凍したディレクトリ下の
jna-master/dist/下にある。

まず、gccで共有ライブラリを作る
例としてソースは、以下のようなものでsoファイルを作ることにする。

soファイルを作る
ここでJNAで使うsoファイル名の最初は必ずlibで始める名前にする必要がある

Javaのファイルを作ってclassファイルを生成する。

ここではjna.jarファイルを同じディレクトリにコピーしてclassファイルを生成する。
(class生成時には必要ないがsoファイルもコピーしておく)
実行してみる。

参考にさせていただいたサイトのURL



javaからJNAを使ってgccの共有ライブラリsoを利用する(引数、戻り値有り)

JNAを使ってGCCで生成した共有ライブラリの中で引数、戻り値のある関数を利用する場合の
例を上げておく

ソースは、以下のようなものでsoファイルを作ることにする。

引数、戻り値のある関数の入ったsoファイルを作る
ここでJNAで使うsoファイル名の最初は必ずlibで始める名前にする必要がある

Javaのファイルを作ってclassファイルを生成する。

ここではjna.jarファイルを同じディレクトリにコピーしてclassファイルを生成する。
(class生成時には必要ないがsoファイルもコピーしておく)
実行してみる。

また各変数宣言のマッピングTypeの相関は以下の通りである

参考にさせていただいたサイトのURL