2

Я переключился на свой Mac и больше не имею эту проблему, но имею аналогичную. OCaml llvm "Unbound module ExecutionEngine"ocaml llvm kaleidoscope учебник «Unbound module LlvmExecutionEngine»

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

из этого учебника http://llvm.org/docs/tutorial/OCamlLangImpl7.html

(я 99% уверен, что эти два являются одними и теми же людьми)

После обойти несколько проблем, я достиг камнем преткновения за последние несколько часов

[email protected]:~/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. 
+0

Ошибка говорит «Освобожденный модуль LlvmExecutionEngine», но вы открываете LLvm_executionengine. Один из них должен быть ошибочным. – camlspotter

+0

@camlspotter Я думал, что это была просто странная проблема с именем. У вас есть другой совет для меня, потому что я очень смущен, что проблема, если, как вы указали, ошибка не соответствует открытому звонку. – Bren

+0

@Bren Вы уверены, что искали подходящий файл? Возможно, вы смотрите на файл toplevel.ml в одном каталоге, но ocamlfind компилирует toplevel.ml в другой каталог, где он говорит 'open LlvmExecutionengine'. – sepp2k

ответ

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 

(Если depext не установлен, то он автоматически установит его. Тогда он будет автоматически запускать эту code )

Тогда я скомпилировать код:

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 
+0

Пробовал первую строчку, теперь пробовал вторую. По какой-то причине линия коммутатора жалуется. дает эту ошибку $ opam switch 4.03.0 [ERROR] "4.03.0" не является допустимым компилятором. – Bren

+0

Результат первой строки находится в нижней части моего ответа. – Bren

+0

Я не использовал то же имя файла, что и вы, измените test.byte с помощью toy.byte. – tobiasBora

Смежные вопросы