我需要在 LISP 脚本中加载库。
脚本“loader.lisp”和库“mylib.dll”在同一个文件夹“parent_dir”中。
如果我从文件夹(当前目录=“parent_dir”)运行脚本,它工作正常:
(load "loader.lisp") ;OK lib loaded successfully
但是如果当前目录在别的地方,它就加载失败(当然它会在错误的目录中查找库):
(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 脚本独立于“工作目录”?
更新:我指定脚本和解释器可执行文件不在同一目录中。
非常感谢!
最佳答案
我会建议以下解决方案:
- 使用完整路径;
- 将库文件始终保存在与您的程序相同的目录中(好吧,有时这不是一个坏主意);
- 更改程序的“开始于”参数;
- 将库文件的路径添加到操作系统变量“PATH”中。
与其说是关于 Lisp 本身,不如说是关于操作系统工作目录概念的问题。
据我所知,涉及“PATH”变量的解决方案可能是最好的解决方案。您可以测试此方法并告诉我们它是否有效。
关于dll - 从 lisp 脚本、工作目录和路径加载库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24283215/