我有一个 JNI 依赖的库,我希望它相对于类路径加载,这可能吗?
问问题
816 次
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/../lib
到rpath
..jnilib
该值在运行时@loader_path
解析为文件的位置。.jnilib
如果要根据类路径加载依赖项,实际上必须自己根据类路径找到库,并使用 显式将它们加载到 jre 中System.load()
,然后在加载库时它们应该由 dyld 预先解析模块依赖。
于 2014-10-21T06:49:45.703 回答