Compiler construction ocaml llvm万花筒教程“;未绑定模块LlvmExecutionEngine“;

Compiler construction ocaml llvm万花筒教程“;未绑定模块LlvmExecutionEngine“;,compiler-construction,ocaml,llvm,executionengineexception,Compiler Construction,Ocaml,Llvm,Executionengineexception,我切换到我的mac电脑,不再有这个问题,但有一个类似的问题 我正在努力让这一切顺利进行: 从本教程 (我99%肯定这两个人是同一个人) 在回避了几个问题之后,我在过去的几个小时里遇到了一个绊脚石 me@mypc:~/Desktop/llvm-master/examples/OCaml-Kaleidoscope/Chapter7$ ocamlbuild -use-ocamlfind toy.byte -package llvm llvm_executionengine Finishe

我切换到我的mac电脑,不再有这个问题,但有一个类似的问题

我正在努力让这一切顺利进行:

从本教程

(我99%肯定这两个人是同一个人)

在回避了几个问题之后,我在过去的几个小时里遇到了一个绊脚石

 me@mypc:~/Desktop/llvm-master/examples/OCaml-Kaleidoscope/Chapter7$ ocamlbuild -use-ocamlfind toy.byte -package llvm llvm_executionengine
    Finished, 0 targets (0 cached) in 00:00:00.
    File "_tags", line 4, characters 41-53:
    Warning: the tag "use_bindings" is not used in any flag declaration, so it will have no effect; it may be a typo. Otherwise use `mark_tag_used` in your myocamlbuild.ml to disable this warning.
    + ocamlfind ocamlc -c -package llvm -o toplevel.cmo toplevel.ml
    File "toplevel.ml", line 6, characters 5-24:
    Error: Unbound module LlvmExecutionEngine
    Command exited with code 2.
    Compilation unsuccessful after building 13 targets (12 cached) in 00:00:00.
我非常确定llvm_executionengine是正确的软件包,就像我尝试了其他软件包一样,它说它不知道它是什么软件包

下面是最上面的几行代码和错误行:

 (*===----------------------------------------------------------------------===
 * Top-Level parsing and JIT Driver
 *===----------------------------------------------------------------------===*)

    open Llvm
    open Llvm_executionengine

    (* top ::= definition | external | expression | ';' *)
    let rec main_loop the_fpm the_execution_engine stream =
      match Stream.peek stream with
      | None -> ()
任何帮助都会很棒

我尝试了tobiasBora答案的第一部分,得到了以下结果:

$ ocamlbuild -use-ocamlfind test.byte -package llvm
Finished, 0 targets (0 cached) in 00:00:00.
File "_tags", line 4, characters 41-53:
Warning: the tag "use_bindings" is not used in any flag declaration, so it will have no effect; it may be a typo. Otherwise use `mark_tag_used` in your myocamlbuild.ml to disable this warning.
Solver failed:
  Ocamlbuild cannot find or build test.ml.  A file with such a name would usually be a source file.  I suspect you have given a wrong target name to Ocamlbuild.
Compilation unsuccessful after building 0 targets (0 cached) in 00:00:00.

首先尝试使用

ocamlbuild -use-ocamlfind toy.byte -package llvm
(请注意,我从您的示例中删除了“llvm_executionengine”)

如果它仍然不起作用,因为它对我有效,请尝试以下方法:首先,我运行的是Ocaml 4.03.0:

opam switch 4.03.0
然后我需要安装llvm:

opam depext llvm.3.8
opam install llvm
(如果未安装depext,它将自动安装它。然后它将自动运行此 )

然后我用以下代码编译您的代码:

ocamlbuild -use-ocamlfind toy.byte -package llvm
(请注意,我在您的示例中删除了“llvm_executionengine”)

您可以注意到一个bug使得llvm 3.8在旧版本的ocaml中不可用。如果您仍然有问题,请尝试安装3.5版本,它可能会解决一些问题:

sudo apt-get install llvm-3.5 llvm-3.5-dev

错误消息显示“Unbound module LlvmExecutionEngine”,但您打开了LLvm_executionengine。其中一个应该是错的。@camlspotter我认为这只是奇怪的名字问题。如果正如您所指出的错误与开放调用不匹配,您是否有其他建议供我参考,因为我非常困惑问题所在。@Bren您确定查看的文件是正确的吗?也许您正在一个目录中查看toplevel.ml,但ocamlfind正在另一个目录中编译toplevel.ml,其中显示的是
open LlvmExecutionengine
@sepp2k,只是仔细检查了一下。现在是。试了第一行,现在试了第二行。开关线路不知什么原因在抱怨。给出此错误$opam switch 4.03.0[错误]“4.03.0”不是有效的编译器。第一行的结果在我的答案的底部。我没有使用与您相同的文件名,请将test.byte更改为toy.byte。对于opam,请运行“opam更新”,然后运行“opam switch 4.03.0”,如果您仍然有问题,请给出“opam交换机列表”。