$ 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
Tôi đã trả lời có cho câu hỏi tập lệnh tự động hoàn tất trong opam init
. Ngoài ra, phần cắt ngắn của lỗi gợi ý những điều sau đây:Làm cách nào để cài đặt thư viện Core của OCaml trên (Arch) Linux x86_64?
Vui lòng cài đặt phiên bản camlp4 toàn hệ thống. Điều này là cần thiết vì bạn đang sử dụng OCaml 4.02.1 và trình chuyển đổi trình biên dịch hệ thống (trong đó sử dụng cài đặt từ trước của bạn chứ không phải biên dịch từ số đầu).
Nếu bạn không thể cài đặt một camlp4 toàn hệ thống, sau đó bạn vẫn có thể sử dụng OCaml 4,02 bằng cách chuyển sang một cài đặt cục bộ qua
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]
Một lần nữa ...
$ 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
Tôi có cần phải chuyển sang trình biên dịch khác không?
$ 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
Tôi nhận thấy gói camlp4 là mồ côi, điều không may vì nó nằm trong kho lưu trữ chính thức. – metabind
camlp4 không được dùng nữa vì nó đang được thay thế bằng ppx. – nlucaroni
không bị phản đối và không được thay thế bằng ppx. ppx và camlp4 có một số giao lộ, nhưng chúng hoàn toàn khác nhau. – ivg