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''を呼び出して下さい。

  • translation/adc/cocoa/foundation/introduction_to_dynamically_loading_code/1200_runtime.txt
  • 最終更新: 2020-12-04 13:38
  • by Decomo