smlnj交互系统: fatal error

标签 sml smlnj google-chrome-os crouton-os

apt-get install smlnj 并尝试从终端调用 sml 后,我的 Chromebook 上的 Crouton chroot 出现奇怪的错误,但我没有遇到过这个错误能够在其他地方找到:

$ 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

有什么指导吗?

最佳答案

编辑: 此问题(错误 #120)已在 SML/NJ 版本 110.77 ( release notes ) 中通过启用 MAP_ANONYMOUS 得到修复,而 MAP_ANONYMOUS 以前在 Linux 中不受支持。安装最新版本的 SMLNJ 比下面的解决方案更好,因为它不需要削弱系统的安全性。如果您继续修改 /dev 的权限,建议在每次 session 后删除 exec 权限。

<小时/>

此问题主要在运行 ChrUbuntu 或 Crouton 的 Chromium 操作系统环境中重现,但在其他环境中遇到类似问题的其他用户也可能会发生。

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

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)
...

因此,解决方案是使用 exec 权限重新挂载 /dev:

$ sudo mount -o remount,exec /dev
$ sml
Standard ML of New Jersey v110.75 [built: Thu May  9 05:41:01 2013]
- 

关于smlnj交互系统: fatal error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23689029/

相关文章:

string - 如何在字符串中添加换行符?

list - SML,编写一个连接列表列表的函数

sml - 处理 ML 中的异常

google-chrome-app - Chrome操作系统启动时自动运行Chrome信息亭应用

.net - Chrome OS 是否有可能支持 .NET 框架?

haskell - (ML) 模块与 (Haskell) 类型类

functional-programming - 二元多项式的霍纳法则

functional-programming - 在计算器语法中为括号添加优先级

algorithm - 新泽西州 SML 中的图表

node.js - Chrome 操作系统支持 Node Js 应用吗?