アイデアは、静的フィールド「sys_paths」を nullにして、変更された値からパスを構築することです。こちらの投稿を参照してください (AjaySingh516 による投稿 #223) http://forums.sun.com/thread.jspa?messageID=3744346#3744346
Class clazz = ClassLoader.class;
Field field = clazz.getDeclaredField("sys_paths");
boolean accessible = field.isAccessible();
if (!accessible)
field.setAccessible(true);
Object original = field.get(clazz);
// Reset it to null so that whenever "System.loadLibrary" is called, it
// will be reconstructed with the changed value.
field.set(clazz, null);
try {
// Change the value and load the library.
System.setProperty("java.library.path", "./libs/");
System.loadLibrary("mylibapr");
} finally {
// Revert back the changes.
field.set(clazz, original);
field.setAccessible(accessible);
}
.
gcj システム プロパティ(参照: libgcj でサポートされる標準プロパティ)
http://gcc.gnu.org/onlinedocs/gcj/System-properties.html
.
解決策 2
: コンパイル時にシステム環境変数を設定する
http://linux.die.net/man/1/gcj
このためには、パラメーターを使用する必要があり-Djava.library.path=./libs/
ますgcj
gcj マニュアル (上記のリンク) から:
--main= クラス名
このオプションは、結果の実行可能ファイルが実行されるときに「メイン」メソッドが呼び出されるクラスの名前を指定するためにリンクするときに使用されます。
-Dname[=値]
このオプションは、「--main」でのみ使用できます。値 value を持つ name という名前のシステム プロパティを定義します。値が指定されていない場合、デフォルトで空の文字列になります。これらのシステム プロパティは、プログラムの起動時に初期化され、「java.lang.System.getProperty」メソッドを使用して実行時に取得できます。
gcj を使用したことはありませんが、ドキュメントによると、これらのシステム プロパティは実行時に取得できるため、他のシステムにも移植できます。
参照: http://gcc.gnu.org/wiki/Statically_linking_libgcj?action=show&redirect=Statically+linking+libgcj