Hatena::ブログ(Diary)

gymnoの自由談

a b link friendfeed twilog iceberg earlymusic

2011-07-28

swigでJavaとc++連携 01:13 swigでJavaとc++連携を含むブックマーク

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);
    }
}
トラックバック - http://d.hatena.ne.jp/gymno/20110728/1311869632