【问题标题】:ocamlfind cannot see installed packageocamlfind 看不到已安装的包
【发布时间】:2014-01-21 17:04:20
【问题描述】:

我想使用命令编译我的项目:

ocamlfind ocamlopt -package ocamlnet -package batteries -package unix -linkpkg oauth.ml

但我收到以下错误:

ocamlfind: Package `ocamlnet' not found
make: *** [oauth.cmi] Error 2

在对这个问题进行一些研究后,我了解到通过 opam 安装的软件包和在 opam 安装之前安装的软件包可能存在问题(在这种情况下使用 ocamlfind)所以我尝试检查并卡住,因为 ocamlfind 是通过 opam 安装的.有谁知道我可以尝试做些什么来解决这个问题?

$ which ocamlfind
/home/user/.opam/4.00.1/bin/ocamlfind

$ opam list 
Installed packages for 4.00.1:
[...]
ocamlfind             1.4.0  A library manager for OCaml
[...]

提前致谢。

【问题讨论】:

    标签: ocaml ocamlfind


    【解决方案1】:

    做一个:

    eval $(opam config env)
    

    这应该可以解决问题。

    #编辑1:

    如果还是不行,删除目录

    /home/user/.opam/4.00.1

    然后再试一次。

    【讨论】:

    • 不幸的是它什么也没做:$ opam config env CAML_LD_LIBRARY_PATH="/home/adam/.opam/4.00.1/lib/stublibs";导出 CAML_LD_LIBRARY_PATH; PERL5LIB="/home/adam/.opam/4.00.1/lib/perl5:";导出 PERL5LIB; OCAML_TOPLEVEL_PATH="/home/adam/.opam/4.00.1/lib/toplevel";导出 OCAML_TOPLEVEL_PATH; MANPATH=":/home/adam/.opam/4.00.1/man";导出MANPATH;路径=“...”;导出路径; $ make [...] ocamlfind: 找不到包 `ocamlnet' make: *** [oauth.cmi] 错误 2
    • 你的意思可能是eval $(opam config env)
    • @Michael 这不是文件而是整个目录,实际上我现在有更大的问题(项目仍未编译),因为现在我得到 $ opam config env [ERROR] global-config does not定义变量库。 “opam 配置环境”失败。甚至 ocaml 也不想运行 $ opam config env [ERROR] global-config 没有定义变量 lib。 “opam 配置环境”失败。它会引导我到某个地方,还是我应该更好地开始重新安装 ocaml 和其他软件包?
    • 如上所述做一个eval $(opam config env)
    • [ERROR] global-config does not define the variable lib 是典型的处于不存在的交换机中。尝试opam switch 4.01.0 或类似的东西切换回现有的开关。
    【解决方案2】:

    由于 cmets 的限制和我所做的部分结果,我正在回答。这是 '~/.opam' 目录中 'grep -r 'ocamlnet' *' 的结果:http://pastebin.com/8cJqMXDY 通过查看第 1-90 行,我们可能会得出结论,实际上根本没有 ocamlnet 库(或者我是在错误的地方寻找它 - 但正如我在评论中所写的那样,所有东西都是使用 opam 安装的 - 我很高兴听到关于这个主题的一些意见)。这些怀疑可以通过两种方式得到部分证实:

    1. 事实上,在第 1-90 行中,我们已经有了 ocamlnet 组件的所有二进制文件 (http://projects.camlcity.org/projects/dl/ocamlnet-3.7.3/doc/html-main/index.html)
    2. 第 90-* 行似乎与使用 opam 管理此软件包所需的一些文件不同。例如

      ~/.opam/repo/default/packages/ocamlnet$ tree -r .
      .
      ├── ocamlnet.3.7.3
      │   ├── url
      │   ├── opam
      │   ├── files
      │   │   └── ocamlnet.install
      │   └── descr
      ├── ocamlnet.3.6.5
      │   ├── url
      │   ├── opam
      │   ├── files
      │   │   ├── ocamlnet.install
      │   │   ├── netpop.patch
      │   │   ├── nethttpd_types.patch
      │   │   └── cloexec.patch
      │   └── descr
      ├── ocamlnet.3.6.3
      │   ├── url
      │   ├── opam
      │   ├── files
      │   │   └── ocamlnet.install
      │   └── descr
      ├── ocamlnet.3.6.0
      │   ├── url
      │   ├── opam
      │   ├── files
      │   │   ├── ocamlnet-ocaml4.diff
      │   │   └── ocamlnet.install
      │   └── descr
      ├── ocamlnet.3.5.1
      │   ├── url
      │   ├── opam
      │   ├── files
      │   │   └── ocamlnet.install
      │   └── descr
      └── ocamlnet.3.2.1
          ├── url
          ├── opam
          ├── files
          │   └── ocamlnet.install
          └── descr
      

    我没有足够多的知识来深入研究它,但在我看来,ocamlnet 只是 opam 使用的其他几个包的快捷方式。 尤其是改变后的那个

    -package ocamlnet
    

    精确到我正在使用的模块

    -package netstring
    

    一切都编译良好​​strong>。对于 ocamlnet 包的奇怪案例(以及迈克尔的提示)B),我仍然愿意接受任何其他解决方案或解释。

    【讨论】:

      猜你喜欢
      • 2020-07-22
      • 2014-12-19
      • 2017-08-05
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 2022-07-28
      相关资源
      最近更新 更多