【问题标题】:Ocaml compile multiple files (circular dependencies)Ocaml编译多个文件(循环依赖)
【发布时间】:2011-05-05 16:02:18
【问题描述】:

我已经为ocaml下载了xml-light并尝试编译,但一直没有成功,问题如下。

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

真的有办法将它们编译在一起吗?因为这个,我觉得很愚蠢。

【问题讨论】:

    标签: dependencies compilation ocaml circular-dependency


    【解决方案1】:

    这不是那么微不足道,没有什么令人惊讶的。这是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
    

    【讨论】:

    • @barti:你再帮帮我……反正到现在还有一件事做不完。当我把这个文件放在我的项目文件夹中,然后我想用open Xml;;打开这个文件,为什么它给了我一个错误消息:Error: xml.cmi is not a compiled interface,我还错过了什么?
    • @barti:在 IDE 上没有办法做到这一点吗?我使用Camelia,当我使用IDE并输入open Xml;;或任何其他文件时发生错误
    • @zfm:无论如何,您必须将库文件放到适当的目录中,不要认为 IDE 会帮助您...这个特定的库使用 mingw 更容易构建(并非没有故障, 不过)
    • @barti:我相信我把它放在了正确的目录中......假设我输入了open Asdf;;,而我没有asdf.cmi',错误将是Error: Unbound module Asdf .所以它检测到了正确的文件夹,正确的.cmi,但它的想法不同,我不明白为什么。
    • @zfm:让我们把你的问题缩小到xml-light,好吗? :) 当你 open Xml 时你得到什么错误?
    猜你喜欢
    • 2020-12-26
    • 2019-10-28
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多