■ はじめに
https://blogs.yahoo.co.jp/dk521123/33062191.htmlで、JNI(Java Native Interface)を使って、JavaからC/C++コードを呼び出した。 しかし、もっと簡単な方法として、JNA (Java Native Access)があるので、纏める
■ JNA (Java Native Access)とは?
* C/C++コードを、Javaから直接呼び出すことができるライブラリ
公式サイト
https://github.com/java-native-access/jna補足:JNR(Java Native Runtime)について
* 試してはいないが、JNR(Java Native Runtime)ってのもあるらしい。 => 簡単な調査した結果は、以下の関連記事を参照https://blogs.yahoo.co.jp/dk521123/37771632.html
■ 利点
* JNIのようにC/C++コードを書かなくてよい
■ ダウンロード先
* JARファイル(今回は「jna-4.2.2.jar」「jna-platform-4.2.2.jar」)をダウンロードし、 2つのJARをインポートする[[https://github.com/java-native-access/jna#download]]
■ サンプル
例1:WindowsAPI を呼び出したサンプル
import com.sun.jna.platform.win32.Kernel32; import com.sun.jna.platform.win32.WinBase; public class Main { public static void main(String[] args) { WinBase.SYSTEMTIME systemtime = new WinBase.SYSTEMTIME(); // WindowsAPIを呼び出し Kernel32.INSTANCE.GetLocalTime(systemtime); short year = systemtime.wYear; short month = systemtime.wMonth; short day = systemtime.wDay; System.out.println( year + "年" + month + "月" + day + "日"); } }
例2:Hello World
* Linux(Debian) で以下を行う [1] C/C++のソースを用意する用意する(今回は「hello.c」) [2] GCCで、SOファイル(For Linux) or DDLファイル(For Windows)を作成する (今回は「libhello.so」「libhello.ddl」) ~~~ [For Linux] gcc -fPIC -shared -o libhello.so hello.c ~~~ [3] Javaプロジェクトを用意し、JNAのJARファイルをインポートする [4] C/C++用のインターフェイスを用意する(今回は「IHello.java」) [5] C/C++の関数を呼び出すクラスを用意する(今回は「Main.java」)
hello.c
#include <stdio.h> void sayHello(){ printf("Hello!\n"); }
IHello.java
import com.sun.jna.Library; import com.sun.jna.Native; public interface IHello extends Library { // インスタンス生成 IHello INSTANCE = (IHello) Native.loadLibrary( "~/workspace/SampleCode/etc/libhello.so", IHello.class); // 関数へのインターフェース void sayHello(); }
Main.java
public class Main { public static void main(String[] args) { IHello hello = IHello.INSTANCE; hello.sayHello(); } }
出力結果
Hello!
■ 余談
* 今度は、「Open JTalk」「NHocr」をJavaから呼び出したいOpen JTalk
http://neu101.seesaa.net/article/267887102.html
http://www.techscore.com/blog/2015/06/29/open-jtalk-japanese-text/
参考文献
http://www.atmarkit.co.jp/fjava/special/jna/jna_1.htmlhttp://d.hatena.ne.jp/torutk/20121020/p1
http://ameblo.jp/ironbeans-308dey49s/entry-12000242657.html
Hello World
http://qiita.com/kiida/items/9d26b850194fa1a02e67
http://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=JNI%A1%A2JNA%A4%CE%BB%C8%A4%A4%CA%FD#p16
https://marpapa.blogspot.jp/2014/12/jna.html
関連記事
JNA (Java Native Access)
基本編https://blogs.yahoo.co.jp/dk521123/37087661.html
あれこれ編
https://blogs.yahoo.co.jp/dk521123/37089190.html
JNI
Java から C++ のソースを呼び出すhttps://blogs.yahoo.co.jp/dk521123/33062191.html
C++ から Java のソースを呼び出す
https://blogs.yahoo.co.jp/dk521123/33067170.html
JNR
入門編https://blogs.yahoo.co.jp/dk521123/37771632.html
その他
【Linux】 OCRライブラリ「NHocr」をインストールする ~ Debian編 ~https://blogs.yahoo.co.jp/dk521123/36629271.html
Linux(仮想環境) で、JDK / Tomcat / Eclipse の環境を構築する ~Debian編~
https://blogs.yahoo.co.jp/dk521123/33854227.html