Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MacOS X下使OPAM与系统编译器协同工作_Macos_Ocaml_Opam_Camlp4_Lwt - Fatal编程技术网

在MacOS X下使OPAM与系统编译器协同工作

在MacOS X下使OPAM与系统编译器协同工作,macos,ocaml,opam,camlp4,lwt,Macos,Ocaml,Opam,Camlp4,Lwt,我正在尝试在MacOS下安装一个非常基本的OPAM。使用macports 我安装了以下软件包: opam@1.2.0 ocaml findlib@1.5.5 ocaml-camlp4@4.02.0.1_1 当我执行opaminit时(不是作为root,因为我只需要一个用户)。 opam开关显示我正在使用系统编译器: 系统C系统编译器(4.02.1) 然后我尝试通过opam安装“lwt”,但中途失败,出现错误: # ocamlfind: Package `camlp4' not found # W

我正在尝试在MacOS下安装一个非常基本的OPAM。使用macports 我安装了以下软件包:

  • opam@1.2.0
  • ocaml findlib@1.5.5
  • ocaml-camlp4@4.02.0.1_1
  • 当我执行opaminit时(不是作为root,因为我只需要一个用户)。
    opam开关
    显示我正在使用系统编译器:

    系统C系统编译器(4.02.1)

    然后我尝试通过opam安装“lwt”,但中途失败,出现错误:

    # ocamlfind: Package `camlp4' not found
    # W: Failure("Command ''/Users/lord/.opam/system/bin/ocamlfind' query -format %d camlp4 > '/var/folders/hh/h6kt24208xj44z0059_xd9rh0000gn/T/oasis-ca8248.txt'' terminated with error code 2")
    
    这是我的
    opam列表

    # Installed packages for system:
    base-bigarray           base  Bigarray library distributed with the OCaml compil
    base-threads            base  Threads library distributed with the OCaml compile
    base-unix               base  Unix library distributed with the OCaml compiler
    camlp4         4.02.1+system  Camlp4 is a system for writing extensible parsers
    ocamlfind              1.5.5  A library manager for OCaml
    
    我注意到它有自己的ocamlfind,而不是systemone。也许这就是导致错误的原因:

    $ /Users/lord/.opam/system/bin/ocamlfind query -format %d camlp4
    ocamlfind: Package `camlp4' not found
    
    $ /opt/local/bin/ocamlfind query -format %d camlp4
    /opt/local/lib/ocaml/camlp4
    

    在通过OPAM安装OCAML编译器和CAMLP之前,我尝试过,在这种情况下,它是有效的,但困扰我的是,我为同一版本安装了两个编译器。如果可能的话,我宁愿使用系统OCAML编译器和CAMLP。

    我不确定您的安装出了什么问题,也许您不应该安装
    OCAML findlib
    ,因为它们可能会以某种方式冲突。我稍后再看。目前,以下工作

    $ sudo port install ocaml ocaml-camlp4 opam
    $ opam init
    $ opam install ocamlfind
    
    这将导致工作安装:

    $ ocamlfind query camlp4
    /opt/local/lib/ocaml/camlp4
    $ which ocamlfind
    /Users/ivg/.opam/system/bin/ocamlfind
    
    更新 我已经验证了我的假设,即系统的
    ocamlfind
    可能与
    opam
    的一个冲突。没有任何证据。即使您同时安装了这两个组件,所有组件都可以正常工作:

    $ sudo port install ocaml-findlib
    $ opam init
    
    系统的
    ocamlfind
    运行良好:

    $ ocamlfind query camlp4
    /opt/local/lib/ocaml/camlp4
    $ which ocamlfind
    /opt/local/bin/ocamlfind
    
    $ ocamlfind query camlp4
    /opt/local/lib/ocaml/camlp4
    $ which ocamlfind
    /Users/ivg/.opam/system/bin/ocamlfind
    
    现在,让我们尝试从opam安装它:

    $ opam install ocamlfind
    
    它也非常有效:

    $ ocamlfind query camlp4
    /opt/local/lib/ocaml/camlp4
    $ which ocamlfind
    /opt/local/bin/ocamlfind
    
    $ ocamlfind query camlp4
    /opt/local/lib/ocaml/camlp4
    $ which ocamlfind
    /Users/ivg/.opam/system/bin/ocamlfind
    

    工作也很好

    所以,也许你走错了方向,你可以删除你的
    ~/.opam
    ,从头开始。另外,我希望你不要忘记用魔法激活你的opam:

    $ eval `opam config env`
    

    命令。

    是的,系统ocaml findlib似乎是问题所在。按您建议的方式卸载后,它工作正常。但是,有一些系统范围的ocaml包依赖于ocaml findlib,比如ocaml ssl。我已经删除了我的~/.opam并重新初始化,现在它似乎可以工作了。请注意,OPAM安装自己的ocamlfind副本,而不是使用通过端口安装的副本。所以这里有一点冗余,但我想没关系。我怀疑问题是在安装软件包的顺序上。实际上我回到了最初的问题。在安装了更多的OPAM软件包后,我遇到了以下错误:“以下内容需要降级或卸载,但您可以明确地升级它们:-lwt.2.4.8”这看起来不像是我的原始问题。由于没有带macports的aspcud解算器,内部的是use,这不是很好。如果降级,请尝试明确指定版本,如
    opam install lwt.2.4.8 cohttp.0.15
    。这将有助于解决问题