【发布时间】:2016-03-25 07:04:39
【问题描述】:
Java 应用程序具有要使用的 JNI 模块。
用户(或此应用程序的安装脚本)应将 JNI 模块放在 Linux (Ubuntu) 或 MacOS X 上的什么位置,以便在无需在代码中指定模块路径的情况下加载此 JNI 模块?
【问题讨论】:
标签: java linux macos java-native-interface
Java 应用程序具有要使用的 JNI 模块。
用户(或此应用程序的安装脚本)应将 JNI 模块放在 Linux (Ubuntu) 或 MacOS X 上的什么位置,以便在无需在代码中指定模块路径的情况下加载此 JNI 模块?
【问题讨论】:
标签: java linux macos java-native-interface
这是指向共享对象detailed explanation 的链接以及操作系统如何搜索它们。
我希望 Java 人停止使用 LD_LIBRARY_PATH 并开始使用现有的目录结构和 ld.so.conf 机制。甚至 OpenJDK 库也被转储在一个不在标准路径上的地方,而且它们也没有添加 ld.so.conf 文件(这有多难?)。
这种方法无需设置您自己的 LD_LIBRARY_PATH 并通过 shell 脚本启动。
如果要安装所需的共享对象,首先测试/usr/local/lib 之类的位置作为系统范围内的安装选择,如果它存在并且现有文件尚未使用您的文件名,则将您的库放在那里。更系统的方法是检查所有 ld.so.conf 文件并查看是否有任何目录与您知道可以使用的内容匹配。 shell 脚本可以在安装时执行此操作。
【讨论】:
将已编译的库(Linux 上的 .so 文件或 MacOS 上的 .dylib)放入您选择的目录中,并将该目录包含在用于启动 JVM 的库搜索路径 LD_LIBRARY_PATH 中。
【讨论】: