1

我有一个 JNI 依赖的库,我希望它相对于类路径加载,这可能吗?

4

1 回答 1

3

相对于classpath,不,这是不可能的 - 库,包括.jnilib遵循根据 JRE 分配的内容定义的操作系统搜索路径,然后是库本身提到的内容。

当您制作 时.jnilib,您可以添加一个链接器标志来指定相对于库的“加载器”路径的 rpath,这将允许您将依赖库放置在与其.jnilib自身相邻的位置,这可以完成类似的行为:

libjni.jnilib: libjni.o
    $(CC) -o $@ $< -Wl,-rpath,@loader_path/../lib

重要的项目是添加-Wl,-rpath,@loader_path/../lib- 表示告诉链接器添加@loader_path/../librpath..jnilib

该值在运行时@loader_path解析为文件的位置。.jnilib

如果要根据类路径加载依赖项,实际上必须自己根据类路径找到库,并使用 显式将它们加载到 jre 中System.load(),然后在加载库时它们应该由 dyld 预先解析模块依赖。

于 2014-10-21T06:49:45.703 回答