在apt-get install smlnj之后,我的Chromebook上的Crouton chroot出现了一个奇怪的错误,并试图从终端调用sml,这是我在其他地方都找不到的错误:
$ 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有指引吗?
发布于 2014-07-28 16:07:41
编辑:这个问题(bug #120)是在SML/NJ 110.77 (发布说明)中通过启用以前在Linux中不支持的MAP_ANONYMOUS来修复的。安装SMLNJ的最新版本比下面的解决方案更可取,因为它不需要削弱系统的安全性。如果确实通过修改/dev的权限来继续,则建议在每个会话之后删除exec权限。
这个问题在运行 ChrUbuntu或Crouton的ChrUbuntu Chromium环境中主要是可复制的,但在其他环境中有类似问题的其他用户可能会遇到此问题。
在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]
- https://stackoverflow.com/questions/23689029
复制相似问题