私は、WindowsのJava.library.pathで.dll
ファイルを必要とするJavaアプリケーションで作業しています。Linuxで同じアプリケーションを実行するには、それぞれの.so
ファイルがありますLinuxマシンのJava.library.path
に追加する必要がありますが、これまでのところ簡単な解決策は見つかりませんでした
.so
を既にクラスパスにあるフォルダーに入れましたが、アプリケーションは.so
に必要なJava.library.path
ファイルがないとまだ文句を言います
私は見つけたい:
.so
をJava.library.path
に追加する方法アプリケーションを起動する前に、含まれるディレクトリをLD_LIBRARY_PATH
に追加します
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/some/pathOfContainingDirectory
Java -XshowSettings:properties
を使用して、Java.library.path(およびその他)の値を表示します。
これを理解するのに苦労しました。ライブラリ名にlib
プレフィックスが含まれていることを確認してください。
だから、ステップ、
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/some/pathOfContainingDirectory"
ライブラリの名前を変更して、プレフィックスがlibになるようにします。 [ビルドスクリプトの一部としてこれを追加]
mv JNIDemo.so libJNIDemo.so
詳細な説明については、この回答を確認してください https://stackoverflow.com/a/3987567/2076566
Java -XshowSettings:propertiesメソッドを使用し、以前に設定されたフォルダーのパスを見つけ、そのsoファイルをそのフォルダーにコピーしました
File file = null;
private String[] libs_path = System.getProperty("Java.library.path").split(":");
public boolean isInstalled() {
boolean isInstalled = false;
for(String lib : libs_path) {
file = new File(lib+"/"+"yourlib.so");
if(file.exists()) {
isInstalled = true;
break;
}
}
return isInstalled;
}
public void install() {
if(!isInstalled) {
for(String lib: lib_path) {
// copy your .so to lib
break;
}
}
}
単一のリンクを作成するだけで、ファイルを編集する必要も、アプリケーションを実行する前にソースをエクスポートしたり実行したりする必要もないため、これがより良い方法だと思います。また、bashrc行は必要ありません。
ただし、アップグレードすると、古いライブラリをロードする可能性があるため、将来のJavaリリースに意図しないエラーが発生する可能性がありますが、リンクを1つ削除することでも解決します。
これは、Java 11 opensdkがインストールされているubuntu 18.04で動作します。
$ locate libjawt.so
$ Java -XshowSettings:properties
上記の2つのコマンドから、これを独自のシステムに調整するために必要な2つのパスを見つけることができます。
Sudo ln -s /path/from/locate/libjawt.so /path/from/properties/libawt.so
Java ll sdkを開いてライブラリを見つけるためのシンボリックリンクを作成しました。 Java/usr/libの代わりに使用することを選択できるパス。Javaライブラリ(シンボリックリンクも含む)を保持する場合。
Sudo ln -s /usr/lib/jvm/Java-11-openjdk-AMD64/lib/libjawt.so /usr/lib/libjawt.so