Учебное пособие по калейдоскопу ocaml llvm "Unbound module LlvmExecutionEngine"

Я переключился на свой Mac и у меня больше нет этой проблемы, но есть похожая. OCaml llvm "Unbound module ExecutionEngine"

Я пытаюсь заставить это работать: https://github.com/llvm-mirror/llvm/tree/master/examples/OCaml-Kaleidoscope/Chapter7

из этого урока http://llvm.org/docs/tutorial/OCamlLangImpl7.html

(Я на 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 -> ()

Любая помощь будет супер!

Я попробовал первую часть ответа Тобиаса Боры и получил такой результат:

$ 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.

1 ответ

Сначала попробуйте скомпилировать с

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

(Если зависящий текст не установлен, он автоматически установит его. Затем он автоматически запустит этот код)

Затем я компилирую ваш код:

ocamlbuild -use-ocamlfind toy.byte -package llvm

(обратите внимание, что я удалил "llvm_executionengine" в вашем примере)

Вы можете заметить, что ошибка делает llvm 3.8 непригодной для использования в старых версиях ocaml. Если у вас все еще есть проблемы, попробуйте установить версию 3.5, это может решить некоторые проблемы:

sudo apt-get install llvm-3.5 llvm-3.5-dev
Другие вопросы по тегам