【发布时间】:2013-04-12 18:10:48
【问题描述】:
我有一个 Java 应用程序,它依赖于一些用 C 编写的遗留代码,它通过 JNI 访问这些代码。原生库存储在一个子目录中(实际上有两个子目录:一个是 32 位库,一个是 64 位库)。
在 Windows 中,以下命令行形式可以正常工作:
java -Djava.library.path=nativelib64 -classpath myapp.jar;jni_lib.jar MyApplication
但是 AIX 和 Linux 上的等效项(基本上将类路径中的分号替换为冒号)因 UnsatisfiedLinkErrors 而失败 - 我不得不在调用之前显式设置 LIBPATH 或 LD_LIBRARY_PATH,因为我没有已经尝试将 -Djava.library.path 设置为(例如“nativelib64”、“./nativelib64”、“/full/path/to/myappdir/nativelib64”)似乎有效。
JVM 的 UNIX 版本不支持从命令行设置 java.library.path 属性吗?
【问题讨论】:
-
什么样的java变量在起作用?
-
您的原生库是否依赖于位于同一子目录中的其他共享库?
-
@Andreas 是的,确实如此,您的评论提醒我,当 ULE 试图从一个本地库链接到另一个库时,它似乎正在发生。我猜这是问题所在的线索:-)
-
完全正确 - 可执行加载器仍然需要找到依赖的共享库,它通过
LD_LIBRARY_PATH完成。见kalblogs.blogspot.co.uk/2009/01/java.html
标签: java linux java-native-interface aix