评论者:shlomi
Alex,
对不起,表达不够清晰。
(clojure.lang.RT/loadLibrary "/tmp/a.so") - 不工作,loadLibrary 预期存在 SD_LIBRARY_PATH 或 java.library.path 指定的路径中的正确命名的库文件。例如,如果有 liba.so 文件存在于 LD_LIBRARY_PATH 上的某处,则 (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);
}