我已经学会了计划并很快掌握了很多计划,然后在其中做了一个项目就好了。字面上花了我几天才完成。我现在正在尝试学习常见的口齿不清以获得对此的感觉,而现在我真的在努力学习asdf。如何将它与库一起使用似乎是常识,但我感到困惑。我想这是因为大多数lisp程序是在repl中制作并运行的,因为一切正常。当我尝试将它编译成可执行文件时,我正在失去我的位置。
是否有人可以给我任何建议或指向我的教程?我真的希望能够创建一个可执行文件给人们,而不必解释如何安装sbcl和(require)然后运行它。我只是想学习在lisp中做一些我无法用方案做的事情。
我想我可以使用方案并使用ffi来使c库工作,但我没有使用c的经验。我只是一个网络开发人员,出于个人原因学习lisp。当然,学习一些c和ffi可能不会像哈哈那样长.ha
感谢
答案 0 :(得分:7)
我真的希望能够成功 可执行文件给予没有的人 不得不解释如何安装sbcl 并且(要求)它然后运行它。
您不需要ASDF来生成“独立”可执行文件。大多数实现都提供了保存可执行映像的方法,但标准中没有提到如何执行此操作(如果要提供它)。
通常,您会将代码加载到正在运行的图像中,然后“转储”该图像。
例如,在SBCL中,您将使用sb-ext:save-lisp-and-die; CCL有ccl:save-application。您必须查看实现的文档,以了解如何执行此操作。
我目前没有SBCL,但这个最小的例子应该可以使用(未经测试):
(defun do-it () (format t "hello world~%"))
(sb-ext:save-lisp-and-die "hello" :toplevel #'do-it :executable t)
这是一个使用CCL的工作示例:
Welcome to Clozure Common Lisp Version 1.6-dev-r14287M-trunk (LinuxX8632)!
? (defun do-it () (format t "hello world~%"))
DO-IT
? (ccl:save-application "hello" :toplevel-function #'do-it :prepend-kernel t)
[danlei@susi ~/build/ccl]% ./hello
hello world
这些可执行映像的大小可能相当大,除非你的实现提供类似树形摇动器的东西,但我认为现在这不应该是一个问题。
您可以在another SO question about this topic中找到clisp的详细示例。
答案 1 :(得分:0)
这不是你要求的,但它可能会有所帮助。
我也无法让ASDF工作得很好。有人用clbuild指出了我,这是对类似问题略有不同的方法。到目前为止,它对我来说效果很好。