评论者:shlomi
亚历克斯,
抱歉我没有表述得足够清楚
(clojure.lang.RT/loadLibrary "/tmp/a.so") - 不起作用,loadLibrary期望库文件存在于由LD_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);
}