1

我有一个 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 属性吗?

4

2 回答 2

4

http://kalblogs.blogspot.co.uk/2009/01/java.html

java.library.path 仅用于解析您在代码中加载的直接本机库。

如果此直接库依赖于其他库(在由 定义的同一路径中java.library.path,或在不同位置),则这些其他库将通过操作系统的标准机制加载。在这种情况下,也需要进行LD_LIBRARY_PATH相应的设置。

于 2013-04-19T11:58:16.723 回答
1

您需要使用“LD_LIBRARY_PATH”变量。

LD_LIBRARY_PATH:本机代码库(在 Linux 上,除了此变量的值之外,查找路径通常包含 /usr/local/lib、/usr/lib、/lib 和其他一些)。LD 这个名字来自动态加载器,将库加载到动态链接的可执行文件中的系统组件。

编辑:

检查此链接: http: //www.chilkatsoft.com/java-loadLibrary-Linux.asp

于 2013-04-19T11:22:16.043 回答