【问题标题】:SBCL save-lisp-and-die: Can I set different names for executable and source file?SBCL save-lisp-and-die:我可以为可执行文件和源文件设置不同的名称吗?
【发布时间】:2020-12-15 11:57:10
【问题描述】:

我可以将 lisp 源代码编译为自包含的可执行文件,并通过二进制文件覆盖源代码。 我的电话:

(sb-ext:save-lisp-and-die #P"test.lisp" :toplevel #'main :executable t)

它运行良好。是否可以为源和exe指定不同的名称,从而避免覆盖源?

【问题讨论】:

标签: lisp common-lisp sbcl


【解决方案1】:

我认为您可能对save-lisp-and-die 的参数感到困惑:位置参数是您正在创建的核心文件(内存映像)或可执行文件:它与源文件完全无关。你所做的只是调用那个巨大的二进制文件test.lisp。特别是您正在加载test.lisp

如果您想转储可执行文件,您通常可以执行以下操作:

loadup.lisp:

(in-package :cl-user)

(load (compile-file "my-big-program.lisp"))

(save-lisp-and-die "my-big-program"
                   :toplevel #'my-big-program
                   :executable t)

my-big-program.lisp:

(in-package :cl-user)

(defun my-big-program ()
  (format t "~&Hello world~%")
  t)

然后做类似的事情

$ sbcl --no-userinit --no-sysinit --load loadup.lisp
[...]
$ ./my-big-program
Hello world
$

显然您可以将所有内容放在一个文件中,但这使得开发代码变得困难,因为每次加载源时 Lisp 都会退出,这有点不可取。

【讨论】:

  • 感谢您的澄清。我不知道这些事实。事实上,我在 (save-lisp-file-compile) 之前做了一个 (load "test.lisp") 并假设 save 命令会读取源文件。我已经尝试过您的解决方案并使用 compile-file 进行了测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2012-10-29
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多