是否可以在JNI库中将类路径设为@rpath?

时间:2014-10-21 04:50:40

标签: java c++ macos java-native-interface rpath

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

1 个答案:

答案 0 :(得分:3)

相对于classpath,不,它是不可能的 - 包括.jnilib在内的库遵循基于JRE分配的内容定义的OS搜索路径,然后是库本身提到的内容。

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

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

重要的项目是添加-Wl,-rpath,@loader_path/../lib - 告诉链接器将@loader_path/../lib添加到rpath的{​​{1}}。

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

如果你想根据类路径加载依赖项,你实际上必须自己找到基于类路径的库,并使用.jnilib明确地将它们加载到jre中,然后它们应该是pre - 当您加载模块所依赖的库时,由dyld解析。