2015-01-21 17 views
5
$ 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 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 

Trả lời

5

Bạn nên chuyển từ trình biên dịch hệ thống sang trình biên dịch OPAM. Sau đó, các nguồn của trình biên dịch sẽ được tải xuống và biên dịch tự động cũng như tất cả các điều kiện tiên quyết. Để chuyển đổi, hãy sử dụng lệnh sau:

opam switch 4.02.1 

bạn có thể sử dụng bất kỳ trình biên dịch sẵn có nào.

Lỗi thực tế là vì một lý do nào đó (tôi nghĩ là do mô hình phát hành), bạn có các phiên bản khác nhau của camlp4 và trình biên dịch OCaml, để chúng không thể nói chuyện với nhau.

+0

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

+0

camlp4 không được dùng nữa vì nó đang được thay thế bằng ppx. – nlucaroni

+0

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

Các vấn đề liên quan