OCaml corebuild无法链接到Core.Std

OCaml corebuild无法链接到Core.Std,ocaml,ocamlbuild,Ocaml,Ocamlbuild,然而,我的问题与类似,在我的例子中设置了。ocamlinit 这是我的ocaml版本 mymac:Desktop myusr$ ocaml --version The OCaml toplevel, version 4.08.1 这是我的opam版本 mymac:Desktop myusr$ opam --version 2.0.5 这是我的opam开关 mymac:Desktop myusr$ opam switch # switch compiler

然而,我的问题与类似,在我的例子中设置了
。ocamlinit

这是我的ocaml版本

mymac:Desktop myusr$ ocaml --version
The OCaml toplevel, version 4.08.1
这是我的opam版本

mymac:Desktop myusr$ opam --version
2.0.5
这是我的opam开关

mymac:Desktop myusr$ opam switch
#  switch   compiler                    description
→  4.08.1   ocaml-base-compiler.4.08.1  4.08.1
   default  ocaml-base-compiler.4.08.1  default
这是我的
.ocamlinit

mymac:Desktop myusr$ cat ~/.ocamlinit
(* ## added by OPAM user-setup for ocamltop / base ## 3ec62baf6f9c219ae06d9814069da862 ## you can edit, but keep this line *)
#use "topfind";;
(* ## end of OPAM user-setup addition for ocamltop / base ## keep this line *)
#thread;;
#require "core.top";;
#require "core.syntax";;
这是我已经安装了core的证据

mymac:Desktop myusr$ opam install core utop
[NOTE] Package utop is already installed (current version is 2.4.1).
[NOTE] Package core is already installed (current version is v0.12.3).
下面是来自真实世界OCaml的
sum.ml
文件:

opencore.Std
让rev读取和累积=
让line=In_channel.input_line In_channel.stdin In
匹配
|无->累计
|某些x->读取和累积(累积+浮点+字符串x的浮点)
让()=
printf“总计:%F\n”(读取和累积0)
下面是我尝试使用
corebuild
构建它时发生的情况:

mymac:Desktop myusr$ corebuild sum.native
+ ocamlfind ocamlc -c -w A-4-33-40-41-42-43-34-44 -strict-sequence -g -bin-annot -short-paths -thread -package core -ppx 'ppx-jane -as-ppx' -o sum.cmo sum.ml
File "sum.ml", line 1, characters 5-13:
1 | open Core.Std
         ^^^^^^^^
Error: Unbound module Core.Std
Command exited with code 2.
Hint: Recursive traversal of subdirectories was not enabled for this build,
  as the working directory does not look like an ocamlbuild project (no
  '_tags' or 'myocamlbuild.ml' file). If you have modules in subdirectories,
  you should add the option "-r" or create an empty '_tags' file.

  To enable recursive traversal for some subdirectories only, you can use the
  following '_tags' file:

      true: -traverse
      <dir1> or <dir2>: traverse

Compilation unsuccessful after building 2 targets (1 cached) in 00:00:00.
mymac:Desktop myusr$corebuild sum.native
+ocamlfind ocamlc-c-w A-4-33-40-41-42-43-34-44-严格顺序-g-bin annot-短路径-线程-包核心-ppx'ppx jane-作为ppx'-o sum.cmo sum.ml
文件“sum.ml”,第1行,字符5-13:
1 |开芯标准
^^^^^^^^
错误:未绑定模块核心.Std
命令已退出,代码为2。
提示:此生成未启用子目录的递归遍历,
因为工作目录看起来不像ocamlbuild项目(否
“_标记”或“myocamlbuild.ml”文件)。如果子目录中有模块,
您应该添加选项“-r”或创建一个空的“\u tags”文件。
要仅对某些子目录启用递归遍历,可以使用
以下“\u标记”文件:
正确:-导线测量
或:导线测量
在00:00:00中生成2个目标(1个已缓存)后编译失败。

为什么corebuild没有链接到核心库?如何修复此问题?

生成脚本将正确加载所有内容。您尝试加载的模块不再存在。您正在尝试使用真实世界OCaml书籍的旧版本以及非常新版本的OCaml和Core。从那时起,Janestreet核心图书馆发生了很大的变化。您应该切换到较新的书籍,或者降级到较旧版本的OCaml和Core库

使用现代核心 由于引入了沙丘和模块别名,因此不再需要额外的
Std
子模块,因此Janestreet将其删除(经过两年的弃用)。因此,我们现在正在写作

open Core
而不是

open Core.Std (* no longer works *)
Core\u内核
et alas也是如此

由于OCaml和janestet从那时起已经移动了很多,因此RWO的框架是用更新的示例创建的。这项工作仍在进行中,但看起来很快就要准备好了。所以你可以切换到它

坚持使用旧版本的OCaml
如果您想使用真实世界OCaml的第一个版本,那么您必须选择一个已知兼容的OCaml版本和Janesteet的核心库。我没有找到任何权威性的建议,哪一个版本更适合与旧书一起使用。所以我建议使用OCAML4.02.3。然后您可以像往常一样使用
opam安装core
(它应该安装113.33.03版),就我所记得的,它应该可以与旧书一起使用。如果您或其他人对此版本有问题,请在评论部分告诉我,我将更新此建议

您是否运行了
eval$(opam config env)
哪个ocamlc
说了什么?谢谢你,知道这本书的新版本正在开发中,这是一个巨大的帮助。我看到新版本立即使用了Dune。我现在设法编译sum.ml,尽管我不知道如何使用这个程序。不过这没关系<代码>mymac:Desktop myusr$./\u build/default/sum.exe 1。致命错误:在文件“stdlib.ml”的第30行,从文件“sum.ml”调用的字符20-45,从文件“sum.ml”调用的字符8,从文件“sum.ml”调用的字符44-61,从文件“sum.ml”调用的字符11,字符23-47引发异常(无效的\u参数“Float.of \u字符串”)。程序希望您键入一个以空行结尾的浮点数序列(例如,3.14、2.17等)(基本上只需按两次Enter键即可)然后您将看到这些数字的总和:)注意,它们应该用换行符分隔(而不是一行)啊,感谢上帝。我以为我疯了。