【发布时间】:2016-10-05 22:14:58
【问题描述】:
直到现在,我已经成功地将我的 Common Lisp 项目构建成一个带有 sbcl 的独立可执行文件,如下所示:
(sb-ext:save-lisp-and-die "myexecutable" :toplevel #'main :executable t)
另外,我已经从 common lisp 调用 C 函数,编译到共享库中;像这样:
(cffi:define-foreign-library libtest
(:unix (:default "./libtest"))
(t (:default "./libtest")))
(cffi:use-foreign-library libtest)
或使用库的绝对路径。生成的可执行文件需要共享库 libtest.so。我在同一个目录中有 myexecutable 和 libtest.so 。但是,如果我使用绝对值,我将无法分发这两个文件。如果我使用“./libtest”,它在从另一个目录运行时找不到库。
这个案例的处理方法是什么? 提前谢谢!
【问题讨论】:
-
为什么不能使用绝对路径重新分配它?
-
假设我放入“/home/me/src/my-project”并写入lisp文件。当我分发这两个文件时,应该以某种方式使用新路径的知识更新 lisp 文件。我如何做到这一点?
-
虽然我认为库通常放在一个系统范围的位置(例如,Linux 上的
/usr/lib),但为什么不能只使用相对路径? -
你是对的。我可以将共享库放在系统范围的位置。但我在想像下面的答案。谢谢!
标签: shared-libraries common-lisp executable sbcl