9

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

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
[...]

提前致谢。

4

2 回答 2

23

做一个:

eval $(opam config env)

那应该可以解决问题。

# 编辑 1:

如果它仍然不起作用,请删除目录

/home/user/.opam/4.00.1

再试一次。

于 2014-01-03T22:14:05.483 回答
2

由于评论的限制和我所做的部分结果,我正在回答。这是 '~/.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

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

于 2014-01-04T10:28:03.380 回答