首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >smlnj交互系统:致命错误

smlnj交互系统:致命错误
EN

Stack Overflow用户
提问于 2014-05-15 21:29:48
回答 1查看 437关注 0票数 4

apt-get install smlnj之后,我的Chromebook上的Crouton chroot出现了一个奇怪的错误,并试图从终端调用sml,这是我在其他地方都找不到的错误:

代码语言:javascript
复制
$ 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

有指引吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-28 16:07:41

编辑:这个问题(bug #120)是在SML/NJ 110.77 (发布说明)中通过启用以前在Linux中不支持的MAP_ANONYMOUS来修复的。安装SMLNJ的最新版本比下面的解决方案更可取,因为它不需要削弱系统的安全性。如果确实通过修改/dev的权限来继续,则建议在每个会话之后删除exec权限。

这个问题在运行 ChrUbuntu或Crouton的ChrUbuntu Chromium环境中主要是可复制的,但在其他环境中有类似问题的其他用户可能会遇到此问题。

strace上运行sml会在错误输出之前进行(尝试)操作:

代码语言:javascript
复制
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给出了:

代码语言:javascript
复制
...
devtmpfs on /dev type devtmpfs (rw,nosuid,noexec,relatime,size=960456k,nr_inodes=240114,mode=755)
...

因此,解决方案是使用/dev权限重新装入exec

代码语言:javascript
复制
$ sudo mount -o remount,exec /dev
$ sml
Standard ML of New Jersey v110.75 [built: Thu May  9 05:41:01 2013]
- 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23689029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档