shared-libraries - 通用 Lisp : standalone executable and shared C library

标签 shared-libraries common-lisp executable sbcl

到目前为止,我已经设法使用 sbcl 将我的 Common Lisp 项目构建成一个独立的可执行文件,如下所示:

(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”,它在从另一个目录运行时找不到库。

本案的处理方法是什么?
先感谢您!

最佳答案

类似 sb-ext:*runtime-pathname*应该给你可执行文件的路径名。

* (describe '*runtime-pathname*)

SB-EXT:*RUNTIME-PATHNAME*
  [symbol]

*RUNTIME-PATHNAME* names a special variable:
  Value: #P"/usr/local/bin/sbcl"
  Documentation:
    The absolute pathname of the running SBCL runtime.

然后,您可以计算同一目录中文件的路径名:
* (merge-pathnames "libtest" *runtime-pathname*)

#P"/usr/local/bin/libtest"

关于shared-libraries - 通用 Lisp : standalone executable and shared C library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39884545/

相关文章:

.net - 从 Web 应用程序异步运行可执行文件(安全解决方案)

java - Java中不声明对象的情况下调用方法

c++ - 我应该将 C++ 应用程序链接到间接使用的共享库吗

common-lisp - 避免在 lisp 中实现 OR 宏函数的副作用

lisp - Lisp 中的相等和反向函数

lisp - Windows 7 上使用 clisp 的 quicklisp 问题

assembly - JMP 到绝对地址(操作码)

.net - 如何在您自己的 C++ 项目中包含外部库?

Angular Cli 工作区之外的 Angular 库

iphone - 我的 iOS 应用程序名称中有一个 +。因此 bundle 无效。需要帮助解决