Mac Big Sur下如何使用指定版本OCaml编译Unison
问题背景
- 运行环境:Mac OS Big Sur 11.5.6
- 已安装组件:
- 通过opam安装的OCaml 4.08.1版本
- 通过Homebrew安装的Unison 2.51.4,该版本使用OCaml 4.12.0编译
- 需求:需要编译绑定OCaml 4.08.1版本的Unison,与Ubuntu端使用OCaml 4.08.1编译的Unison实例兼容同步
- 遇到的问题:尝试通过opam直接安装Unison时,出现依赖安装失败、编译阶段提示找不到
sys/inotify.h头文件的报错
解决方案
- 先切换到opam的OCaml 4.08.1环境,确保当前shell使用目标版本OCaml
eval $(opam env --switch=4.08.1)
执行ocaml -version验证,输出为4.08.1即为切换成功。
下载Unison 2.51.4版本源码压缩包,解压后进入源码根目录。
执行编译命令,手动禁用inotify依赖:
make UISTYLE=text NATIVE=true USE_INOTIFY=false
编译完成后,源码目录下会生成unison和unison-fsmonitor两个可执行二进制文件。
- 替换原有Unison二进制,或者将编译生成的二进制路径加入系统环境变量首位优先调用。
若要替换Homebrew安装的版本,先执行which unison确认Homebrew的安装路径(默认一般为/usr/local/bin/unison),执行以下命令替换:
sudo cp ./unison /usr/local/bin/unison sudo cp ./unison-fsmonitor /usr/local/bin/unison-fsmonitor
替换完成后执行unison -version验证,输出信息中显示的OCaml编译版本为4.08.1即为操作成功。
原因说明
sys/inotify.h是Linux平台专属的文件系统事件通知头文件,Mac OS系统不存在该文件,opam安装Unison时默认开启inotify依赖,因此会触发编译报错。- Unison要求同步两端的程序主版本号、编译使用的OCaml版本完全一致才能正常运行,因此必须绑定OCaml 4.08.1编译Mac端的Unison实例。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

