sml:无法确定 emacs 中的操作系统,但在终端中工作正常
sml: unable to determine operating system in emacs but works fine in terminal
我在 MAC OS 10.14 Mojave 上成功安装了 smlnj。它在终端中工作得很好。然后,我遇到了在 emacs 中安装 sml 包的麻烦。当我在 .sml 文件中键入内容时,颜色和缩进都是正确的。但是,当我执行 C-c C-s 并按回车键时,它显示 "sml: unable to determine architecture/operating system," 因此我无法在此缓冲区中执行任何操作,例如键入 1+1;或其他任何东西。有没有关于如何解决这个问题的提示?我被困在这里一整天了。提前致谢!
这似乎是 SML/NJ 的 运行 时间系统中的一个问题:
我只有 110.77 的源代码,我不知道你 SML/NJ 是什么版本 运行,但这是我如何完成调试过程以及如何之后你可以做:
$ ack "unable to determine arch" smlnj
config/_heap2exec
24: die "unable to determine architecture/operating system"
config/_link-sml
47: echo "$CMD: unable to determine architecture/operating system"
config/_run-sml
62: echo "$CMD: unable to determine architecture/operating system"
也许 Emacs 没有为 SML/NJ 的二进制文件导出正确的环境变量以正确检测操作系统。深入研究 config/_run-sml
,这看起来像导致错误消息的代码:
ARCH_N_OPSYS=`"$BIN_DIR/.arch-n-opsys"`
if [ "$?" != "0" ]; then
echo "$CMD: unable to determine architecture/operating system"
exit 1
fi
eval $ARCH_N_OPSYS
在 config/_arch-n-opsys
里面有一个用于 MacOS 的 switch 语句:
Darwin)
case `uname -p` in
powerpc)
ARCH=ppc
case `uname -r` in
9*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.5 Leopard
*) exit 1;;
esac;;
i386) ARCH=x86;
case `uname -r` in
9*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.5 Leopard
10*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.6 Snow Leopard
11*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.7 Lion
12*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.8 Mountain Lion
13*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.9 Mavericks
14*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.10 Yosemite
*) exit 1;;
esac;;
shell 脚本 .arch-n-opsys
是一个决定您使用的操作系统的脚本。所以似乎 SML/NJ 110.77 的 运行 时间系统没有检测到 10.10 之后的 MacOS。为什么这不是 Emacs 之外的问题我不确定。
您可以通过 M-x shell
RET 在 Emacs 中尝试 运行 程序并键入:
cd /usr/lib/smlnj/bin
ls -a
./.arch-n-opsys
我怀疑如果将此 .arch-n-opsys
二进制文件替换为一个小的 shell 脚本,该脚本硬编码了您的首选选项,则可能是:
#!/bin/sh
echo "ARCH=darwin; OPSYS=darwin; HEAP_SUFFIX=darwin-darwin"
如果这不起作用,也许原始 .arch-n-opsys
shell 脚本列表中的一些其他选项会起作用。
仅当您有兴趣为其他人解决问题时:
查看最新版本 110.85 是否支持 MacOS > 10.10。
如果没有,请写信给 the email at the bottom of smlnj.org and link to this Whosebug post and say what uname -r
does on your system, or supply a diff,特别适合您的系统。
我在 MAC OS 10.14 Mojave 上成功安装了 smlnj。它在终端中工作得很好。然后,我遇到了在 emacs 中安装 sml 包的麻烦。当我在 .sml 文件中键入内容时,颜色和缩进都是正确的。但是,当我执行 C-c C-s 并按回车键时,它显示 "sml: unable to determine architecture/operating system," 因此我无法在此缓冲区中执行任何操作,例如键入 1+1;或其他任何东西。有没有关于如何解决这个问题的提示?我被困在这里一整天了。提前致谢!
这似乎是 SML/NJ 的 运行 时间系统中的一个问题:
我只有 110.77 的源代码,我不知道你 SML/NJ 是什么版本 运行,但这是我如何完成调试过程以及如何之后你可以做:
$ ack "unable to determine arch" smlnj
config/_heap2exec
24: die "unable to determine architecture/operating system"
config/_link-sml
47: echo "$CMD: unable to determine architecture/operating system"
config/_run-sml
62: echo "$CMD: unable to determine architecture/operating system"
也许 Emacs 没有为 SML/NJ 的二进制文件导出正确的环境变量以正确检测操作系统。深入研究 config/_run-sml
,这看起来像导致错误消息的代码:
ARCH_N_OPSYS=`"$BIN_DIR/.arch-n-opsys"`
if [ "$?" != "0" ]; then
echo "$CMD: unable to determine architecture/operating system"
exit 1
fi
eval $ARCH_N_OPSYS
在 config/_arch-n-opsys
里面有一个用于 MacOS 的 switch 语句:
Darwin)
case `uname -p` in
powerpc)
ARCH=ppc
case `uname -r` in
9*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.5 Leopard
*) exit 1;;
esac;;
i386) ARCH=x86;
case `uname -r` in
9*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.5 Leopard
10*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.6 Snow Leopard
11*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.7 Lion
12*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.8 Mountain Lion
13*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.9 Mavericks
14*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.10 Yosemite
*) exit 1;;
esac;;
shell 脚本 .arch-n-opsys
是一个决定您使用的操作系统的脚本。所以似乎 SML/NJ 110.77 的 运行 时间系统没有检测到 10.10 之后的 MacOS。为什么这不是 Emacs 之外的问题我不确定。
您可以通过 M-x shell
RET 在 Emacs 中尝试 运行 程序并键入:
cd /usr/lib/smlnj/bin
ls -a
./.arch-n-opsys
我怀疑如果将此 .arch-n-opsys
二进制文件替换为一个小的 shell 脚本,该脚本硬编码了您的首选选项,则可能是:
#!/bin/sh
echo "ARCH=darwin; OPSYS=darwin; HEAP_SUFFIX=darwin-darwin"
如果这不起作用,也许原始 .arch-n-opsys
shell 脚本列表中的一些其他选项会起作用。
仅当您有兴趣为其他人解决问题时:
查看最新版本 110.85 是否支持 MacOS > 10.10。
如果没有,请写信给 the email at the bottom of smlnj.org and link to this Whosebug post and say what
uname -r
does on your system, or supply a diff,特别适合您的系统。