2015-01-21 10 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 

opam init 동안 자동 완성 스크립트 질문에 에 응답했습니다. 또한 오류의 잘림 부분은 다음을 의미합니다.(Arch) Linux x86_64에 OCaml Core 라이브러리를 어떻게 설치합니까?

시스템 전체 버전의 camlp4를 설치하십시오. 이것은 이므로 OCaml 4.02.1과 시스템 컴파일러 스위치 ( 스크래치 중 하나를 컴파일하지 않고 은 기존의 설치를 사용합니다)를 사용하고 있기 때문에 필요합니다. 당신이 시스템 전체 camlp4를 설치할 수없는 경우

, 당신은 여전히 ​​다시 한번

# 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 switch 4.02.1

...

$ 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 
를 통해 로컬 설치로 전환하여 OCaml의 4.02을 사용할 수 있습니다

다른 컴파일러로 전환해야합니까?

$ 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 

답변

5

시스템 컴파일러에서 OPAM으로 전환해야합니다. 그런 다음 컴파일러의 소스가 자동으로 다운로드되고 모든 필수 구성 요소가 컴파일됩니다.

opam switch 4.02.1 

대신 4.02.1은 물론 사용 가능한 컴파일러를 사용할 수 있습니다 전환하기 위해, 다음과 같은 명령을 사용합니다.

실제 오류는 어떤 이유로 (롤링 모델로 인해) 서로 다른 버전의 camlp4과 OCaml 컴파일러가있어 서로 통신 할 수 없기 때문입니다.

+0

camlp4 패키지가 고아 인 것으로 나타났습니다. 공식 저장소에 있기 때문에 불행합니다. – metabind

+0

camlp4는 ppx로 대체되므로 더 이상 사용되지 않습니다. – nlucaroni

+0

그것은 더 이상 사용되지 않으며 ppx로 대체되지 않습니다. ppx와 camlp4에는 몇 개의 교차점이 있지만 완전히 다른 도구입니다. – ivg