2

問題

私は自分のMacで単体テストを実行しようとしています。テストはLinuxサーバーで正常に実行されますが、次のトレースでローカルに失敗します。

java.lang.UnsatisfiedLinkError: no fedel_client in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1045)
    ....

私が試したこと

.soサーバーからファイルをコピーします

fedel_client.soサーバーから/workspace/dapper/java/lib/native/macosxローカルマシンにコピーし、 java.library.path:に追加しました。

-Djava.library.path=/workspace/dapper/java/lib/native/macosx:...

シンボリックリンクを作成する

Javaが前者(拡張子なし)を探している場合に備えて、からfedel_clinetへのシンボリックリンクを作成しました。fedel_clinet.so.so

.soディレクトリを.bashrcに追加します

.so次の場所にディレクトリを追加してみましたPATH

PATH=$PATH:/Users/adamatan/workspaces/trunk/dapper/java/lib/native/macosx

そしてLD_LIBRARY_PATH

export LD_LIBRARY_PATH="/Users/adamatan/workspaces/trunk/dapper/java/lib/native/macosx"

印刷するjava.library.path

java.library.pathEclipse環境での変更がJVMに伝播されたかどうかを確認するために、印刷しました。

System.out.println(System.getProperty("java.library.path"));

そして得た:

/workspace/dapper/java/lib/native/macosx:....

Eclipse構成に配置した正確な値。

アイデアをデバッグしますか?

前述のすべてのソリューションでまったく同じエラーが発生しました。この問題をデバッグする方法はありますか?Javaからより詳細なエラーメッセージを受け取ることはできますか?ファイルが見つからないか、ロードされていませんか?ロードされていない場合、それはなぜですか?

4

1 に答える 1

4

読み方が間違っているかもしれませんが、ネイティブ ライブラリ ( libfedel_client.so) を Linux サーバーから自分の Mac にコピーしたようです。これが事実である場合、これは確かに機能しません。Mac で Linux ネイティブ ライブラリを使用することはできません。Mac で再コンパイルしてlibfedel_client.dylib.

.jnilib使用している Apple Java ランタイムのバージョンによっては、拡張機能を使用する必要がある場合があります。初期のランタイムでは の.jnilib代わりに が使用されていましたが.dylib、どちらの拡張も引き続きサポートされています (.dylib現在は がデフォルトになっています)。

于 2012-12-09T17:09:53.973 に答える