Common Lisp导出函数未定义:ASDF构建可执行文件失败排查
排查
rps:main未定义的常见原因 以下是导致ASDF构建时提示rps:main未定义的核心原因,按排查优先级排序:
包导出缺失:检查
package.lisp是否导出了main函数。如果main定义在:rps包内,但未添加(export '(main))到包定义中,ASDF跨包引用时会无法找到该函数。正确示例:(defpackage :rps (:use :cl) (:export #:main))ASDF系统未包含目标文件:查看
rps.asd的:components段,确认是否包含rps.lisp。若系统定义漏了这个文件,编译时根本不会加载main函数的代码。比如:(defsystem "rps" :version "0.1.0" :author "Your Name" :license "MIT" :depends-on () :components ((:file "package") (:file "rps")) ; 必须包含该行,确保加载rps.lisp :build-operation "program-op" :build-pathname "rps" :entry-point "rps:main")函数包归属错误:确认
rps.lisp开头是否有(in-package :rps)声明。如果main函数定义时不在:rps包的上下文里,它会默认归属COMMON-LISP-USER包,自然无法通过rps:main访问。函数定义失效:检查
rps.lisp中main函数的定义是否正确——比如有没有拼写错误(如写成defun mian (...)),或者被条件编译宏(如#+nil)注释掉,导致函数实际未被编译生成。Makefile构建指令不完整:查看Makefile里的构建命令,确认是否正确调用了ASDF的完整构建操作。比如是否使用
sbcl --eval '(asdf:make :rps)'这类指令,而非仅单独编译某个文件。若只编译package.lisp而未处理rps.lisp,main函数不会被加载。
内容的提问来源于stack exchange,提问作者Vinn
相关产品推荐
相关产品推荐

