无法确定操作系统

23
当我打开终端(我安装了smlnj)并输入 sml 后,它会显示错误信息 sml: unable to determine architecture/operating system。这是什么意思?我是按照这个网站的说明进行安装的,但我不确定——指导有误吗?
图片如下:enter image description here
6个回答

25

最近OS X二进制安装程序的问题仍然存在,只是焦点转移到了OS X的10.9 Mavericks和10.10 Yosemite版本。虽然根本原因已在最近的源代码版本中得到解决。

这就是为什么现在解决此问题只需要获取一个新编译的二进制包。为此,您最好通过homebrew来安装smlnj。您可以使用以下命令完成:

brew update
brew cask install smlnj

截至2021年,使用cask安装的命令为

brew install --cask smlnj

这将为您编译软件包,因此您无需检查源代码并自行进行编译,从而避免麻烦。

为了清理系统并避免重复,您可以通过执行以下操作来删除以前的安装:

sudo rm -rf /usr/local/smlnj*

关于星号:我有一个只含有110.76版本的裸smlnj文件夹,还有一个smlnj-110.75文件夹,我猜以前尝试安装了两个不同的版本...

你可能需要删除任何指向旧的smlnj文件夹(直接位于/usr/local/下)的自己创建的软链接,在上一步中已经被删除。


我尝试使用brew install,结果收到以下错误信息:`/usr/local/Cellar/smlnj/110.77/SMLNJ_HOME/bin/.run/run.x86-darwin: Fatal error -- Uncaught exception SysErr with <unknown> raised at <sysconf.c>config/install.sh !!! Boot code failed, no heap image (sml.x86-darwin).` 这显然是一个已知的问题。https://github.com/Homebrew/homebrew/issues/32915 (另外,您可以提醒人们在安装之前更新他们的brew公式吗?如果您不经常使用brew,很容易忘记这一点)。 - Shon
已经获得10个赞,因为具体性而受到赞赏。太遗憾了,偶像投票规则不适用。;-) - vwvan

18

如果您使用的是OSX 10.8或更高版本(uname -r会给您显示以12开头的版本号),那么SML/NJ pre 110.75在没有额外调整的情况下可能无法正常工作。这是一个已知问题,可以通过将10.8选择项(见下面的12行)添加到.arch-n-opsys中的操作系统检测代码来解决:

    :
    10*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.6
    11*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.7
    12*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.8
    13*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.9 Mavericks
    14*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.10 Yosemite
    15*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.11 El Capitan
    16*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.12 Sierra
    17*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.13 High Sierra

    *)   exit 1;;
esac;;

相同的问题也存在于3.x Linux内核中。 - Jesper.Reenberg
8
具体来说,您需要将其添加到/usr/local/smlnj/bin/.arch-n-opsys中。(在此提及是因为链接已损坏,问题仍然存在于110.79和10.11 El Capitan...) - Luke Maurer

5

针对paxdiablo的回答,如果你正在运行macOS Sierra(版本10.12),需要输入以下命令来运行sml:

16*) OPSYS=darwin;  HEAP_OPSYS=darwin ;; # macOS 10.12 Sierra

所以加上更多的上下文,它会变成这样:
      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
      15*) OPSYS=darwin;  HEAP_OPSYS=darwin ;; # MacOS X 10.11 El Capitan
      16*) OPSYS=darwin;  HEAP_OPSYS=darwin ;; # macOS 10.12 Sierra
      17*) OPSYS=darwin;  HEAP_OPSYS=darwin ;; # macOS 10.13 High Sierra
      *) exit 1;;
    esac;;

SML/NJ 110.79版本已经配置了适用于El Capitan的OS X系统,但尚缺少Sierra版本。


救了我的命。在工作会话之间更新操作系统,结果一切都崩溃了。谢谢你的帮助。 - brntsllvn

1

我升级了Macbook后,花费数小时仍无法解决这个问题。以前,我在Macbook Air上使用OSX 10.8 Maverick,其中分发 https://www.smlnj.org/dist/working/current/index.html#macos-installer 实际上可以正常工作。

在升级到运行OSX 10.14 Mojave的Macbook Pro之后,安装并添加到PATH后运行sml会出现OP的错误消息。

在努力寻找一些解决方案(包括被标记为可接受的解决方案之一)之后,最终有效的方法是 brew cask install smlnj


1

Sierra 10.12.6

通过Homebrew安装SML brew install smlnj

编辑你的.bash_profile并在文件末尾添加export PATH=/usr/local/Cellar/smlnj/110.81/bin:$PATH

之后执行source ~/.bash_profile来应用新路径,这样你的系统就会添加新的位置并知道在你输入sml时该去哪里找到所需的文件。


0

我在意外安装了旧版本的SML/NJ后遇到了这个问题。我通过删除/usr/local/smlnj来删除之前的安装,并使用OS X预构建系统的SML/NJ 110.78重新安装。最新下载可在下载此处中获得,未来的用户应该参考此处,因为我的解决方案的细节可能在他们使用时已经过时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接