Учебное пособие по калейдоскопу 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