这似乎是 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 的运行时系统似乎没有检测到 MacOS 超过 10.10。为什么这不是 Emacs 之外的问题我不确定。
您可以尝试在 Emacs 中通过 M-x shell RET 运行程序并输入:
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 并链接到此 StackOverflow 帖子,并说明 uname -r 在您的系统上做了什么,或提供特别适用于您的系统的 a diff。
李>