Как установить библиотеку ядра OCaml на (Arch) Linux x86 64?


$ ocaml -version
The OCaml toplevel, version 4.02.1
$ opam --version
1.2.0
$ opam init 
$ opam install core

#=== ERROR while installing camlp4.4.02.1+system ==============================#
# opam-version 1.2.0
# os           linux
# command      sh ./check-camlp4.sh
# path         /home/john/.opam/system/build/camlp4.4.02.1+system
# compiler     system (4.02.1)
# exit-code    1
# env-file     /home/john/.opam/system/build/camlp4.4.02.1+system/camlp4-32324-f0f09f.env
# stdout-file  /home/john/.opam/system/build/camlp4.4.02.1+system/camlp4-32324-f0f09f.out
# stderr-file  /home/john/.opam/system/build/camlp4.4.02.1+system/camlp4-32324-f0f09f.err
### stdout ###
# ...[truncated]
# 4.02 by switching to a local installation via `opam switch 4.02.1`.
# 
# Here are some installation instructions for camlp4 if you obtained OCaml
# via the OPAM binary packages:
# 
# http://software.opensuse.org/download.html?project=home%3Aocaml&package=ocaml
# 
# * Debian/Ubuntu: sudo apt-get install camlp4-extra
# * RHEL/CentOS/Fedora: sudo yum install ocaml-camlp4
# 
### stderr ###
# ./check-camlp4.sh: line 3: camlp4orf: command not foun

Я ответил да на вопрос автозавершения скриптов во время opam init. Кроме того, усеченная часть ошибки предполагает следующее:

Пожалуйста, установите общесистемную версию camlp4. Это необходимо так как вы используете OCaml 4.02.1 и системный переключатель компилятора (который использует уже существующую установку, а не компилирует ее из царапина).

Если вы не можете установить общесистемный camlp4, то вы все еще можете использовать Данные, используемые 4.02 по переключение на локальную установку через opam switch 4.02.1

# pacman -S camlp4
$ opam install camlp4
$ opam info camlp4
            package: camlp4
            version: 4.02.1+system
         repository: default
           homepage: https://github.com/ocaml/camlp4
            license: LGPLv2
  installed-version: 4.02.1+system [system]

Еще раз...

$ opam install core

#=== ERROR while installing herelib.109.35.02 =================================#
# opam-version 1.2.0
# os           linux
# command      make
# path         /home/john/.opam/system/build/herelib.109.35.02
# compiler     system (4.02.1)
# exit-code    2
# env-file     /home/john/.opam/system/build/herelib.109.35.02/herelib-31366-c61e7b.env
# stdout-file  /home/john/.opam/system/build/herelib.109.35.02/herelib-31366-c61e7b.out
# stderr-file  /home/john/.opam/system/build/herelib.109.35.02/herelib-31366-c61e7b.err
### stdout ###
# ...[truncated]
# ocamlfind ocamlopt -shared -linkall lib/herelib.cmxa -o lib/herelib.cmxs
# ocamlfind ocamldep -syntax camlp4o -package camlp4.extend -package camlp4.quotations -package camlp4.lib -modules lib/pa_here.mli > lib/pa_here.mli.depends
# ocamlfind ocamlc -c -g -syntax camlp4o -package camlp4.extend -package camlp4.quotations -package camlp4.lib -I lib -o lib/pa_here.cmi lib/pa_here.mli
# + ocamlfind ocamlc -c -g -syntax camlp4o -package camlp4.extend -package camlp4.quotations -package camlp4.lib -I lib -o lib/pa_here.cmi lib/pa_here.mli
# File "lib/pa_here.mli", line 1:
# Error: The files /usr/lib/ocaml/pervasives.cmi
#        and /usr/lib/ocaml/camlp4/Camlp4.cmi make inconsistent assumptions
#        over interface Pervasives
# Command exited with code 2.
# Makefile:21: recipe for target 'build' failed
### stderr ###
# File "setup.ml", line 232, characters 8-26:
# Warning 3: deprecated: String.set
# Use Bytes.set instead.
# File "setup.ml", line 2385, characters 6-24:
# Warning 3: deprecated: Lazy.lazy_from_fun
# Use Lazy.from_fun instead.
# E: Failure("Command ''/usr/bin/ocamlbuild' lib/herelib.cma lib/herelib.cmxa lib/herelib.a lib/herelib.cmxs lib/pa_herelib.cma lib/pa_herelib.cmxa lib/pa_here
lib.a lib/pa_herelib.cmxs -use-ocamlfind -tag debug' terminated with error code 10")
# make: *** [build] Error 1

Нужно ли переключаться на другой компилятор?

$ opam switch
system  C system  System compiler (4.02.1)
--     -- 3.11.2  Official 3.11.2 release
--     -- 3.12.1  Official 3.12.1 release
--     -- 4.00.0  Official 4.00.0 release
--     -- 4.00.1  Official 4.00.1 release
--     -- 4.01.0  Official 4.01.0 release
--     -- 4.02.0  Official 4.02.0 release
--     -- 4.02.1  Official 4.02.1 release
1 5

1 ответ:

Вам следует переключиться с системного компилятора на OPAM. Затем исходные файлы компилятора будут загружены и скомпилированы автоматически, а также все необходимые компоненты. Для переключения используйте следующую команду:

opam switch 4.02.1

Вместо 4.02.1 Можно, конечно, использовать любой доступный компилятор.

Фактическая ошибка заключается в том, что по какой-то причине (я думаю, из-за скользящей модели выпуска) у вас разные версии компилятора camlp4 и OCaml, так что они не могут разговаривать друг с другом.