dll - 从 lisp 脚本、工作目录和路径加载库

标签 dll load lisp sbcl working-directory

我需要在 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”变量的解决方案可能是最好的解决方案。您可以测试此方法并告诉我们它是否有效。

How to set path in Windows .

关于dll - 从 lisp 脚本、工作目录和路径加载库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24283215/

相关文章:

.net - 如何使用 COM 类构建互操作(用 delphi 编写)

html - 消除页面加载之间的白色 Phonegap iOS

visual-studio-2010 - VS2010负载测试: How can I perform custom action that is run once prior to each load test

c# - 捕获所有异常以进行详细记录 - 优点和缺点

macros - Lisp 评估宏表达式中的变量

lisp - 打印分成 X 列的长列表

java - UnsatisfiedLinkError : Native Library C:\Domino\nlsxbe. dll 已加载到另一个类加载器中

c++ - 从 VB6 调用的 C++ DLL 函数中的输出数组参数

c# - 在 C# 项目中动态加载 DLL 文件 - 如何?

scheme - 将代码从 Common Lisp 转换为 Scheme