http://d.hatena.ne.jp/gymno/20110728/1311868581
の続き
今度は
すみっこのメモ - SWIGでJNI〜JavaからCのプログラムを呼ぶ
http://www.sabamiso.net/yoggy/hiki/?SWIG%A4%C7JNI%A1%C1Java%A4%AB%A4%E9C%A4%CE%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0%A4%F2%B8%C6%A4%D6
SWIG and Java
http://www.swig.org/Doc1.3/Java.html
を参照した
同様にhello.cppとhello.hとhello.iを用意した後 同様に
swig -java -c++ hello.i
とやると hello.javaとhelloJNI.javaとMyClass.javaができる
MyClassはc++コードで自分で書いたクラスだが 別ファイルになるのか
c++の明示的なメモリ管理をjavaのポインタにうまく置き換えるためのものであるように見える
g++ -c -fpic hello.cpp
g++ -c -fpic hello_wrap.cxx -I//System/Library/Frameworks/JavaVM.framework/Headers/
g++ -shared hello.o hello_wrap.o -o libhello.jnilib
でhello.oとhello_wrap.oとlibhello.jnilibができ
javac hello*.java
で
MyClass.class hello.class helloJNI.classができる
而して
javac Main.java
とやると
$ java Main 4
Hello World!!
sum to 4 = 6
のようになる
Main.java
public class Main {
static {
System.loadLibrary("hello");
}
public static void main(String [] args) {
hello.hello();
if (args.length!=1) {
return;
}
int d = Integer.parseInt(args[0]);
int ret = hello.sum(d);
System.out.println("sum to "+d+" = "+ret);
}
}