将 JNI 模块放在 Linux 或 OS X 中的什么地方

Where would one put a JNI module in Linux or OS X

Java 应用程序具有要使用的 JNI 模块。

用户(或此应用程序的安装脚本)应将 JNI 模块放在 Linux(Ubuntu)或 MacOS X 上的什么位置,以便可以在不指定的情况下加载此 JNI 模块代码中模块的路径?

将已编译的库(Linux 上的 .so 文件或 MacOS 上的 .dylib 文件)放入您选择的目录中,并将此目录包含在用于启动 JVM 的库搜索路径 LD_LIBRARY_PATH 中.

这是 link 到 detailed explanation 的共享对象,以及 OS 如何搜索它们。

我希望 Java 人们停止使用 LD_LIBRARY_PATH 并开始使用现有的目录结构和 ld.so.conf 机制。即使是 OpenJDK 库也被转储到一个不在标准路径上的地方,它们也不添加 ld.so.conf 文件(这有多难?)。

这种方法避免了设置您自己的 LD_LIBRARY_PATH 并通过 shell 脚本启动的需要。

如果要安装所需的共享对象,首先测试像 /usr/local/lib 这样的地方作为系统范围的安装选择,如果它存在并且现有文件尚未使用您的文件名,然后将你的图书馆在那里。一种更系统的方法是检查所有 ld.so.conf 文件,看看是否有任何目录与您知道可以使用的内容相匹配。 shell 脚本可以在安装时执行此操作。