簡単なC言語ライブラリ(32bitコンパイル)を64bitJVMで動くPlayFramework内で実行したいが、その方法を悩み中。
一番シンプルな Runtime#execを使う
Runtime.getRuntime().exec()
は通常の環境であれば有効な策だが、PlayFrameworkでは利用しない方が良い。
このexecを実行する際、forkを行って自分のプロセスと同じだけメモリを確保するらしく、
何百MBも利用しているplayframeworkから実行するのは非現実的。
JNAを利用する
JNIよりも簡単にNativeコードを実行する方法としてJNAがある。
public interface HogeDLL extends Library {
HogeDLL INSTANCE =
(HogeDLL) Native.loadLibrary(
"/home/admin/workspace/Hoge.dll",
HogeDLL.class);
int function1(String text, String filename);
}
final HogeDLL dll = HogeDLL.INSTANCE;
dll.function1(text, filePath);
が、この場合、対象のライブラリとJVMは同じbit数で動いていなければならない。
このため、32bit向けにコンパイルされたライブラリを64bitのJVMで動かすことができない。
軽く調べた限りではJNIも同様の様子。
次の手
探し中。