Ocaml编译多个文件(循环依赖)

发布于 2024-11-05 14:26:05 字数 339 浏览 5 评论 0原文

我已经下载了ocaml的xml-light并尝试编译它,但从未成功,问题如下。

当我输入ocamlopt dtd.ml时,会出现错误Unbound module Xml。 然后我输入ocamlopt xml.ml,就会出现错误Unbound value XmlParser.make。 然后我输入ocamlopt xmlParser.ml,就会出现错误Unbound module Dtd

实际上有办法将它们编译在一起吗?因为这个我觉得自己很愚蠢。

I have downloaded xml-light for ocaml and try to compile it, but it has never been succeeded, the problem is as follow.

When I input ocamlopt dtd.ml, there will be an error Unbound module Xml.
Then I input ocamlopt xml.ml, there will be an error Unbound value XmlParser.make.
Then I input ocamlopt xmlParser.ml, there will be an error Unbound module Dtd.

is there actually a way to compile them together? I feel so stupid because of this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

溺深海 2024-11-12 14:26:05

这并不是一件微不足道的事,也没有什么令人惊讶的。这是 make 的输出(来自 mingw/cygwin ocaml 发行版):

ocamlyacc xml_parser.mly
ocamlc  xml.mli
ocamlc  dtd.mli
ocamlc  xml_parser.mli
ocamlc  -c xml_parser.ml
ocamllex xml_lexer.mll
ocamlc  xml_lexer.mli
ocamlc  -c xml_lexer.ml
ocamlc  -c dtd.ml
ocamlc  xmlParser.mli
ocamlc  -c xmlParser.ml
ocamlc  -c xml.ml
ocamlc -o xml-light.cma -a  xml_parser.cmo xml_lexer.cmo dtd.cmo xmlParser.cmo xml.cmo

测试:

ocamlc xml-light.cma test.ml -o test.exe

make install 输出:

ocamlopt  -c xml_parser.ml
ocamlopt  -c xml_lexer.ml
ocamlopt  -c dtd.ml
ocamlopt  -c xmlParser.ml
ocamlopt  -c xml.ml
ocamlopt -o xml-light.cmxa -a  xml_parser.cmx xml_lexer.cmx dtd.cmx xmlParser.cmx xml.cmx

cp xml-light.cmxa xml-light.a xml-light.cma xml.mli xmlParser.mli dtd.mli xml.cmi xmlParser.cmi dtd.cmi xml.cmx dtd.cmx xmlParser.cmx `ocamlc -where`

注意最后一行(我用换行符分隔它) :你可能没有 cp 命令;只需手动创建 %OCAMLLIB%\xml-light 目录并将列出的文件复制到其中。然后你可以像这样构建你的项目:

ocamlopt -I +xml-light xml-light.cmxa foo.ml -o foo.exe

It is not so trivial, nothing surprising. Here is the output of make (from mingw/cygwin ocaml distribution):

ocamlyacc xml_parser.mly
ocamlc  xml.mli
ocamlc  dtd.mli
ocamlc  xml_parser.mli
ocamlc  -c xml_parser.ml
ocamllex xml_lexer.mll
ocamlc  xml_lexer.mli
ocamlc  -c xml_lexer.ml
ocamlc  -c dtd.ml
ocamlc  xmlParser.mli
ocamlc  -c xmlParser.ml
ocamlc  -c xml.ml
ocamlc -o xml-light.cma -a  xml_parser.cmo xml_lexer.cmo dtd.cmo xmlParser.cmo xml.cmo

And the test:

ocamlc xml-light.cma test.ml -o test.exe

make install output:

ocamlopt  -c xml_parser.ml
ocamlopt  -c xml_lexer.ml
ocamlopt  -c dtd.ml
ocamlopt  -c xmlParser.ml
ocamlopt  -c xml.ml
ocamlopt -o xml-light.cmxa -a  xml_parser.cmx xml_lexer.cmx dtd.cmx xmlParser.cmx xml.cmx

cp xml-light.cmxa xml-light.a xml-light.cma xml.mli xmlParser.mli dtd.mli xml.cmi xmlParser.cmi dtd.cmi xml.cmx dtd.cmx xmlParser.cmx `ocamlc -where`

Note the last line (i've separated it with newline): you probably won't have cp command; just create %OCAMLLIB%\xml-light directory manually and copy listed files there. Then you can build your project like this:

ocamlopt -I +xml-light xml-light.cmxa foo.ml -o foo.exe
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文