ARGENTO CUORE

 May the code be with you.

--.--.--[--] スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2010.05.11[火] SCALAからCを呼ぶ

JNIをScalaで使うメモ。


SCALA_JNITest.scala
class SCALA_JNITest {
System.loadLibrary("SCALA_JNITest")
@native def printText():Unit
}

System.loadLibrary()を生成の度に呼んで良いものなのか気になる……。

Javaだと、
static {
System.loadLibrary("Hoge")
}

という感じに呼ぶみたいなので、同名のシングルトンオブジェクトを作って、そこでSystem.loadLibraryを行うようにしてみたら動作しませんでしたorz


$fsc SCALA_JNITest.scala

でコンパイルしたあと、

$javah -classpath .:/hoge/piyo/scala-library.jar SCALA_JNITest

とやって、C言語用のヘッダーファイルを作ります。
あとは、そのヘッダーファイルをインクルードして、Cのコードを書く。
#include <stdio.h>
#include "SCALA_JNITest.h"

JNIEXPORT void JNICALL Java_SCALA_1JNITest_printText(JNIEnv *env, jobject obj){
printf("Hello!");
return;
}


$gcc -shared -I/usr/lib/jvm/default-java/include SCALA_JNITest.c -o libSCALA_JNITest.so
でコンパイル。できた共有ライブラリを、Javaのクラスパスが通っている場所に設置する。

object CallJNI {
def main(args:Array[String]):Unit = {
val v = new SCALA_JNITest()
v.printText()
}
}

で呼び出せることを確認。
スポンサーサイト

Comment






(編集・削除用)


管理者にだけ表示を許可

Trackback

http://ronor.blog81.fc2.com/tb.php/84-7db3d234

この記事にトラックバック(FC2Blog User)

Scala Feed

scala feed

FC2カウンター

プロフィール

RoNor

Author:RoNor
得意呪文はScalaですって言えるようになるのが夢です。
デスマーチ中、パーティメンバーの防御力を向上させたりさせなかったり。

検索フォーム

QRコード

QRコード

Copyright © 2009-2010 ARGENTO CUORE and RoNor All rights reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。