sml
后,它会显示错误信息 sml: unable to determine architecture/operating system
。这是什么意思?我是按照这个网站的说明进行安装的,但我不确定——指导有误吗?图片如下:
![enter image description here](https://istack.dev59.com/LsOQa.webp)
最近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/下)的自己创建的软链接,在上一步中已经被删除。
如果您使用的是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;;
/usr/local/smlnj/bin/.arch-n-opsys
中。(在此提及是因为链接已损坏,问题仍然存在于110.79和10.11 El Capitan...) - Luke Maurer针对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版本。
我升级了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
。
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
时该去哪里找到所需的文件。
我在意外安装了旧版本的SML/NJ后遇到了这个问题。我通过删除/usr/local/smlnj
来删除之前的安装,并使用OS X预构建系统的SML/NJ 110.78重新安装。最新下载可在下载此处中获得,未来的用户应该参考此处,因为我的解决方案的细节可能在他们使用时已经过时。