SBCL编译时内存分配异常问题求助
解决SBCL
save-lisp-and-die 生成空文件与内存映射错误的方法 禁用地址空间随机化(ASLR)
这个错误大概率是ASLR干扰了SBCL的内存基地址请求。临时关闭ASLR:sudo sysctl -w kernel.randomize_va_space=0编译完成后恢复默认值:
sudo sysctl -w kernel.randomize_va_space=2手动指定动态空间基地址
启动SBCL时覆盖默认的内存起始地址,选一个系统未占用的区域:sbcl --dynamic-space-size 512 --dynamic-space-start 0x7c0000000000进入REPL后再执行
save-lisp-and-die命令,地址可根据你的系统内存情况调整(比如换成0x4000000000这类更小的起始值)。验证
toplevel函数有效性
确保my-app:main已经正确定义且能正常执行。先在REPL里加载代码并测试函数:(load "my-app.lisp") (my-app:main) ; 确认无报错 (sb-ext:save-lisp-and-die "my-app.exe" :toplevel #'my-app:main)如果函数未定义或执行出错,
save-lisp-and-die会生成空文件。禁用核心压缩
添加:compression nil参数避免压缩过程中出现异常:(sb-ext:save-lisp-and-die "my-app.exe" :toplevel #'my-app:main :compression nil)升级SBCL版本
Debian仓库的SBCL 2.1.11存在已知的内存映射相关bug,建议编译官方最新版:- 安装依赖:
sudo apt install build-essential libc6-dev - 下载并编译最新源码(以2.4.0为例):
wget https://sourceforge.net/projects/sbcl/files/sbcl/2.4.0/sbcl-2.4.0-source.tar.bz2 tar xjf sbcl-2.4.0-source.tar.bz2 cd sbcl-2.4.0 sh make.sh --prefix=/usr/local sudo sh install.sh
- 安装依赖:
内容的提问来源于stack exchange,提问作者Lieven Boes
相关产品推荐
相关产品推荐

