OCamlfind无法找到已安装的包。

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

感谢您的提前支持。
2个回答

23

做a:

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"; export CAML_LD_LIBRARY_PATH; PERL5LIB="/home/adam/.opam/4.00.1/lib/perl5:"; export PERL5LIB; OCAML_TOPLEVEL_PATH="/home/adam/.opam/4.00.1/lib/toplevel"; export OCAML_TOPLEVEL_PATH; MANPATH=":/home/adam/.opam/4.00.1/man"; export MANPATH; PATH="..."; export PATH; $ make [...] ocamlfind:未找到“ocamlnet”包 make: *** [oauth.cmi] 错误 2 - Stephen Dedalus
你可能想说的是 eval $(opam config env) - Jonathan Protzenko
@Michael 这不是文件,而是整个目录,现在我有更大的问题(项目仍无法编译),因为现在我得到了 $ opam config env [ERROR] global-config does not define the variable lib. 'opam config env' failed. 甚至 ocaml 也不想运行 $ opam config env [ERROR] global-config does not define the variable lib. 'opam config env' failed. 这会引导我去哪里,还是我最好重新安装 ocaml 和其他软件包? - Stephen Dedalus
请按照上述步骤执行 eval $(opam config env) - TheNiceGuy
1
【错误】global-config未定义变量lib,这通常是因为不存在的开关。尝试使用opam switch 4.01.0或类似的命令切换回现有的开关。 - Fabrice Le Fessant
显示剩余2条评论

2
我正在回答这个问题,因为评论有限制,并且我已经得出了部分结果。以下是在“~/.opam”目录下运行“grep -r 'ocamlnet' *”命令的结果:http://pastebin.com/8cJqMXDY。通过查看1-90行,我们可以得出结论,实际上根本没有ocamlnet库(或者我正在错误的地方寻找它——但正如我在评论中写的,所有东西都是使用opam安装的——我很乐意听取一些关于此主题的意见)。这些怀疑可以通过两种方式部分确认:
  1. in fact in lines 1-90 we've all binaries of ocamlnet components (http://projects.camlcity.org/projects/dl/ocamlnet-3.7.3/doc/html-main/index.html)
  2. lines 90-* doesn't seem like something other than some files needed to manage this package using opam. E.g.

    ~/.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软件包(以及Michael的提示)感到好奇的解释。B)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接