从lisp脚本,工作目录和路径加载库

时间:2014-06-18 10:28:06

标签: dll load lisp sbcl working-directory

我需要在LISP脚本中加载库。

脚本“loader.lisp”和库“mylib.dll”位于同一文件夹“parent_dir”中。

如果我从文件夹(当前目录=“parent_dir”)内部运行脚本,它可以正常工作:

(load "loader.lisp") ;OK lib loaded successfully

但如果当前目录在其他地方,则无法加载(当然它在错误的目录中查找lib):

(load "parent_dir/loader.lisp") ;ERROR, of course I'm in the wrong working dir!

;Error opening shared object "mylib.dll":
;dlopen(mylib.dll, 10): image not found.

“loader.lisp”脚本包含(也)以下代码:

(setq LIB_PATH "mylib.dll")

(if (string= (software-type) "Darwin")
    (setq LIB_PATH "mylib_osx.lib"))

#+allegro
  (load LIB_PATH)
#+sbcl
  (sb-alien:load-shared-object LIB_PATH)

问题是:如何使loader.lisp脚本“工作目录” - 独立?

更新:我指定解释器可执行文件的脚本不在同一目录中。

非常感谢!

1 个答案:

答案 0 :(得分:1)

我建议采用以下解决方案:

  • 使用完整路径;
  • 保持库文件始终与您的程序位于同一目录中(好吧,有时它不是一个坏主意);
  • 更改参数"从"开始你的计划;
  • 将库文件的路径添加到OS变量" PATH"。

这是关于OS工作目录概念的问题,而不是关于Lisp本身的问题。

据我所知,解决方案涉及" PATH"变量可能是最好的。您可以测试此方法并告诉我们它是否有效。

How to set path in Windows