评论由:shlomi
亚历克斯,
抱歉没有解释清楚。
(clojure.lang.RT/loadLibrary "/tmp/a.so") - 不工作,loadLibrary期望在LD_LIBRARY_PATH或java.library.path指向的路径下存在适当命名的库文件。例如,如果LD_LIBRARY_PATH上有liba.so文件,则(clojure.lang.RT/loadLibrary "a")将工作。
对于不需要依赖环境设置或.so文件预先存在的用例,您可以替代使用System/load来使用System/loadLibrary。例如,如果您想从正在运行的Clojure程序中下载某些平台的适当.so文件,或者将.so文件放置在jar文件中。在这些情况下,您可以从jar中下载或提取它们,分别放入某个临时文件夹(该文件夹不在LD_LIBRARY_PATH中),然后使用它们的完整路径来加载,在运行程序中使用它们(即无需特殊脚本或准备任务)。
如果我要为src/jvm/clojure/lang/RT.java编写一个补丁,它将是
// 在系统类加载器中而不是Clojure自带的库中,从任何地方加载一个库
public static void loadObject(String libFullPath){
System.load(libFullPath);
}