是否可以使类路径成为JNI库中的@rpath



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

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

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

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

重要的一项是-Wl,-rpath,@loader_path/../lib的添加,即告诉链接器将@loader_path/../lib添加到.jnilibrpath

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

如果你想基于类路径加载依赖项,你实际上必须自己找到基于类路径的库,并使用System.load()显式地将它们加载到jre中,然后当你加载模块所依赖的库时,dyld应该预先解析它们。

最新更新