这个想法是使静态字段“sys_paths”为空,以便它可以根据更改的值构造路径。请参阅此处的帖子(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=类名
链接时使用此选项以指定在运行生成的可执行文件时应调用其“main”方法的类的名称。
-Dname[=值]
此选项只能与“--main”一起使用。它定义了一个名为 name 的系统属性,其值为 value。如果未指定值,则默认为空字符串。这些系统属性在程序启动时初始化,并且可以在运行时使用“java.lang.System.getProperty”方法检索。
我从未使用过 gcj,但根据文档,这些系统属性可以在运行时检索,因此它也可以移植到其他系统。
另见:http ://gcc.gnu.org/wiki/Statically_linking_libgcj?action=show&redirect=Statically+linking+libgcj