Не удалось установить OCaml на macOS Mac M1

Я установил Merlin 6 месяцев назад, чтобы иметь возможность скомпилировать Ocaml, и у меня не было проблем. Я недавно обновился, чтобы обновить все, но не удалось заставить пакет работать.

Когда я пытаюсь переустановить его, я получаю это сообщение об ошибке (opam install -y merlin):

      [coq-released] synchronised from https://coq.inria.fr/opam/released
[default] no changes from https://opam.ocaml.org
The following actions will be performed:
  ∗ install ocaml-base-compiler 4.12.0  [required by ocaml]
  ∗ install ocaml-config        2       [required by ocaml]
  ∗ install ocaml               4.12.0  [required by merlin]
  ∗ install ocamlfind           1.9.3   [required by dot-merlin-reader]
  ∗ install dune                2.9.3   [required by merlin]
  ∗ install result              1.5     [required by merlin]
  ∗ install easy-format         1.3.2   [required by yojson]
  ∗ install csexp               1.5.1   [required by merlin]
  ∗ install cppo                1.6.8   [required by yojson]
  ∗ install biniou              1.2.1   [required by yojson]
  ∗ install yojson              1.7.0   [required by merlin]
  ∗ install dot-merlin-reader   4.1     [required by merlin]
  ∗ install merlin              4.4-412
===== ∗ 13 =====

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><>   
⬇ retrieved biniou.1.2.1  (cached)
⬇ retrieved csexp.1.5.1  (cached)
⬇ retrieved dot-merlin-reader.4.1  (cached)
⬇ retrieved cppo.1.6.8  (cached)
⬇ retrieved easy-format.1.3.2  (cached)
⬇ retrieved dune.2.9.3  (cached)
⬇ retrieved ocaml-base-compiler.4.12.0  (cached)
⬇ retrieved result.1.5  (cached)
⬇ retrieved ocamlfind.1.9.3  (cached)
⬇ retrieved yojson.1.7.0  (cached)
⬇ retrieved merlin.4.4-412  (cached)
[ERROR] The installation of ocaml-base-compiler failed at "make install".

#=== ERROR while installing ocaml-base-compiler.4.12.0 ========================#
# context     2.1.2 | macos/arm64 |  | https://opam.ocaml.org#71d8d30e
# path        ~/.opam/4.12.0/.opam-switch/build/ocaml-base-compiler.4.12.0
# command     ~/.opam/opam-init/hooks/sandbox.sh install make install
# exit-code   2
# env-file    ~/.opam/log/ocaml-base-compiler-11755-86d59b.env
# output-file ~/.opam/log/ocaml-base-compiler-11755-86d59b.out
### output ###
# if test -f ocamlnat ; then \
# [...]
#        "/Users/theosouchon/.opam/4.12.0/lib/ocaml"; \
#     /usr/bin/install -c -m 644 \
#        toplevel/opttopstart.cmx toplevel/opttopstart.o \
#        "/Users/theosouchon/.opam/4.12.0/lib/ocaml/compiler-libs"; \
#   fi
# cd "/Users/theosouchon/.opam/4.12.0/lib/ocaml/compiler-libs" && \
#      ranlib ocamlcommon.a ocamlbytecomp.a ocamloptcomp.a
# ranlib: error: exactly one archive should be specified
# make[2]: *** [installoptopt] Error 1
# make[1]: *** [installopt] Error 2
# make: *** [install] Error 2

Если у вас когда-нибудь появится идея решить эту проблему, мне интересно

Большое спасибо, Тео Сушон.

1 ответ

Проблема, которая у вас есть, не имеет ничего общего с мерлином как таковым. Проблема в том, что вы не можете собрать компилятор с помощью набора инструментов llvm, который по умолчанию используется на вашей машине.

Версия инструмента GNU может принимать несколько аргументов архива, в отличие от версии llvm, которая не работает более чем с одним архивом.

Общий ответ заключается в том, что вам следует установить и выбрать цепочку инструментов GNU для сборки OCaml. Я бы начал свое расследование с бега which ranlibчтобы понять, почему у вас сломан ПУТЬ. Также возможно, что вы использовали brewчтобы установить набор инструментов llvm, затем используйте brew unlinkотменить это. В конце концов, вы хотите ranlibна вашем пути, что для ranlib --versionотпечатки GNU ranlib, нет LLVM.

Кроме того, в macOS есть инструмент под названием xcode-selectкоторый позволяет вам устанавливать и выбирать наборы инструментов. У меня нет последней версии macOS, поэтому я не уверен, но вы можете попробовать запустить xcode-select --installустановить набор инструментов и использовать xcode-select --switchчтобы выбрать подходящий.

С учетом всего сказанного, средства отслеживания проблем OCaml и opam гораздо лучше подходят для решения таких проблем, чем SO.

Другие вопросы по тегам