评论由: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`编写补丁,它将是
在System ClassLoader中加载库,而不是Clojure自己的,从任何地方
public static void loadObject(String libFullPath){
System.load(libFullPath);
}