我有一个我的JNI依赖的库,我希望它相对于类路径加载,这可能吗?
答案 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解析。