apt-get install smlnj
后我的Chromebook上的Crouton chroot发生了一个奇怪的错误,并尝试从终端拨打sml
,这是我在其他任何地方都找不到的错误:< / p>
$ sml
/usr/lib/smlnj/bin/sml: Error -- unable to map 1179648 bytes, errno = 1
/usr/lib/smlnj/bin/sml: Fatal error -- unable to allocate memory object for BIBOP
任何指导?
答案 0 :(得分:4)
编辑:通过启用以前在Linux中不支持的MAP_ANONYMOUS,在SML / NJ版本110.77(release notes)中修复了此问题(错误#120)。安装最新版本的SMLNJ将优于下面的解决方案,因为它不需要削弱系统的安全性。如果您通过修改/dev
的权限继续,则建议您在每次会话后删除exec
权限。
此问题主要在运行ChrUbuntu或Crouton 的 Chromium OS环境中可重现,但在其他环境中遇到类似问题的其他用户可能会遇到此问题。
在strace
上运行sml
会在错误输出之前执行此(尝试)操作:
open("/dev/zero", O_RDONLY) = 4
mmap2(NULL, 1245184, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 4, 0) = -1 EPERM (Operation not permitted)
根据mmap(2)文档,EPERM
表示系统正在尝试在标记为noexec
的目录中分配具有执行权限的内存。
确实,mount
给出了:
...
devtmpfs on /dev type devtmpfs (rw,nosuid,noexec,relatime,size=960456k,nr_inodes=240114,mode=755)
...
因此,解决方案是使用/dev
权限重新安装exec
:
$ sudo mount -o remount,exec /dev
$ sml
Standard ML of New Jersey v110.75 [built: Thu May 9 05:41:01 2013]
-