将 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 脚本可以在安装时执行此操作。
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 脚本可以在安装时执行此操作。