JavaからObjective-Cのライブラリを読み込む
JavaアプリケーションでObjective-Cの動的ライブラリを読み込むには、NSRuntimeクラスを使用します。 そのライブラリがバンドルの中に含まれている場合、NSBundleクラスがより適しているでしょう。
NSRuntimeの代表的なメソッド、loadLibrary
は読み込む動的ライブラリを表すString引数を取ります。
その文字列はライブラリへの絶対パス、もしくはライブラリ名だけを示します。
ライブラリ名のみが与えられた場合、標準的な接頭辞lib
または接尾辞.dylib
の有無を問わず、NSRuntimeはそのライブラリを見つけるまでディレクトリ一覧の中を探します。
例えば、/usr/lib
に置かれたlibMyCode.dylib
という名前のライブラリの読み込みは、下記の全てパターンで動作します。
NSRuntime.loadLibrary("/usr/lib/libMyCode.dylib"); // もしくは、/usr/libが検索パスのならば NSRuntime.loadLibrary("MyCode"); NSRuntime.loadLibrary("libMyCode.dylib");
読み込み後、そのライブラリはbasenameInitialization
関数呼び出しによって初期化されますが、basenameとは接頭辞と接尾辞を除いたライブラリの名前の事です。
例えば、libMyCode.dylib
というライブラリの場合、読み込んだ際に初期化のためのMyCodeInitialization
という名前の関数が作られます。
この関数は引数を持ちません。
ライブラリが見つからない、または初期化関数がない場合、アプリケーションはUnsatisfiedLinkError
エラーで終了します。
NSRuntimeクラスは、絶対パス指定のないライブラリの読み込みを試みた時の検索ディレクトリの一覧を管理します。
初期状態の検索パスは/usr/lib/java
と>/usr/local/lib/java
です。
addPathToLibrarySearchPaths
メソッドでパスをそのリストに追加出来ます。
このメソッドは、検索リストへ追加するディレクトリの絶対パスを表す1つのString引数を持ちます。
例えば、/usr/lib
をリストに追加するには、次のようにします:
<code java>
NSRuntime.addPathToLibraryPaths(“/usr/lib”);
現在の検索パスの一覧を得るには、
librarySearchPaths''を呼び出して下さい。