実行時にJNIライブラリを読み込もうとしたときに私の顧客のコンピュータで異常な動作が発生しました。Java System.load(libName)が間違ったlib名を探します
System.load("libtestlibrary.so")
でライブラリをロードしようとすると、私は与えられたライブラリ名が(誤って)「LIB」を接頭辞と.soが「接尾辞ているように思え
liblibtestlibrary.so.so: cannot open shared object file: No such file or directory
を取得私たちの図書館は見つかりませんでした。
これは、1台のマシン(AIX 6)でのみ発生します。私はまったく同じJREを使用して私たち自身のAIX 6ボックスでこの動作を再現することができなかったので、これは顧客マシンのいくつかのOS設定によって引き起こされたと推測しています。
これを無効にする方法はありますか?
'System.load("/fullpath/libtestlibrary.so ")'または 'System.loadLibrary(" testlibrary ")'を試してください。後者は、プロパティ 'java.library.path'を設定することと組み合わされました。 –
注:ユーティリティ 'truss(1)'を使用して、オプション '-f'を指定してデバッグしてください。 –
問題はパスではなく、ライブラリは現在のディレクトリにあります。問題は、ライブラリ名に "lib"という接頭辞を付け、 ".so"で接尾辞を付けることによって、ライブラリ名を変更することです。私は 'System.load(" testlibrary ")'を使ってライブラリをロードできると理解していますが、この場合、他のすべてのプラットフォームでコードが失敗します。 'System.loadLibrary(" testlibrary ")'は、私がドキュメンテーションを理解している限り、ネイティブライブラリに使用するべきです。 –