Идея состоит в том, чтобы сделать статическое поле "sys_paths" пустым , чтобы оно создавало пути из измененного значения.
Смотрите пост здесь (Пост # 223 от AjaySingh516) 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 = CLASSNAME
Эта опция используется при связывании для указания имени класса, чей «основной» метод должен вызываться при запуске результирующего исполняемого файла.
-dNAME [= значение]
Эта опция может использоваться только с "--main". Он определяет системное свойство с именем name и значением value. Если значение не указано, то по умолчанию используется пустая строка. Эти системные свойства инициализируются при запуске программы и могут быть получены во время выполнения с помощью метода "java.lang.System.getProperty".
Я никогда не работал с gcj, но в соответствии с документацией эти системные свойства могут быть получены во время выполнения, следовательно, он будет переносим и на другие системы.
Также см .: http://gcc.gnu.org/wiki/Statically_linking_libgcj?action=show&redirect=Statically+linking+libgcj