Несвязанный модуль llvm

Я работал над учебным пособием по калейдоскопу LLVM для OCaml. В третьей части урока я перешел к примеру кода в папке

OCaml-Kaleidoscope\Chapter3

Я столкнулся с проблемой при компиляции с

ocamlbuild toy.byte

на cygwin. Это код, указанный в руководстве для компиляции.

Я получаю ошибку

''ocamlc.opt -c -o codegen.cmo codegen.ml
File "codegen.ml", line 5, characters 5-9:
Error: Unbound module Llvm
Exit code 2 while executing this command:
''ocamlc.opt -c -o codegen.cmo codegen.ml

Я посмотрел некоторые решения этой проблемы. Одно решение, которое я нашел, состояло в том, чтобы использовать

ocamlbuild -use-ocamlfind toy.byte -package llvm

вместо

ocamlbuild toy.byte

Однако, когда я попытался это, я получил эту ошибку:

Failure: ocamlfind not found on path, but -no-ocamlfind not used.

Чтобы это исправить я попытался:

opam install ocamlfind

Но ocamlfind уже установлен.

Другое решение, которое я нашел, было использовать:

opam install llvm

Это привело к:

The following actions will be performed:
  - install llvm 3.7

=-=- Gathering sources =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

=-=- Processing actions -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[llvm: ./install.sh 3.7] Command started
[ERROR] The installation of llvm failed at "./install.sh 3.7 make
        C:\\cygwin64\\home\\setup\\.opam\\system
        C:\\cygwin64\\home\\setup\\.opam\\system\\lib".
[llvm: ocamlfind remove] Command started

#=== ERROR while installing llvm.3.7 ==========================================#
# opam-version         1.3.0~dev2 (d4f7e01216dbb44af4e7cc6539a1b0afa9be9d2c)
# os                   win32
# command              bash -c ./install.sh 3.7 make C:/cygwin64/home/setup/.opa                             m/system C:/cygwin64/home/setup/.opam/system/lib
# path                 C:\cygwin64\home\setup\.opam\system\build\llvm.3.7
# exit-code            2
# env-file             C:\cygwin64\home\setup\.opam\system\build\llvm.3.7\llvm-1                             0768-58c514.env
# stdout-file          C:\cygwin64\home\setup\.opam\system\build\llvm.3.7\llvm-1                             0768-58c514.out
# stderr-file          C:\cygwin64\home\setup\.opam\system\build\llvm.3.7\llvm-1                             0768-58c514.err
### stdout ###
# [...]
# config.status: executing bindings/ocaml/Makefile.ocaml commands
# make: Entering directory '/home/setup/.opam/system/build/llvm.3.7/build/bindin                             gs'
# llvm[0]: Constructing LLVMBuild project information.
# make[1]: Entering directory '/home/setup/.opam/system/build/llvm.3.7/build/bin                             dings/ocaml'
# make[2]: Entering directory '/home/setup/.opam/system/build/llvm.3.7/build/bin                             dings/ocaml/llvm'
# llvm[2]: Compiling llvm_ocaml.c for Release+Asserts build
# /home/setup/.opam/system/build/llvm.3.7/Makefile.rules:1536: recipe for target                              '/home/setup/.opam/system/build/llvm.3.7/build/bindings/ocaml/llvm/Release+Asse                             rts/llvm_ocaml.o' failed
# make[2]: Leaving directory '/home/setup/.opam/system/build/llvm.3.7/build/bind                             ings/ocaml/llvm'
# /home/setup/.opam/system/build/llvm.3.7/Makefile.rules:880: recipe for target                              'all' failed
# make[1]: Leaving directory '/home/setup/.opam/system/build/llvm.3.7/build/bind                             ings/ocaml'
# /home/setup/.opam/system/build/llvm.3.7/Makefile.rules:939: recipe for target                              'ocaml/.makeall' failed
# make: Leaving directory '/home/setup/.opam/system/build/llvm.3.7/build/binding                             s'
### stderr ###
# [...]
# configure: WARNING: dlopen() not found - disabling plugin support
# configure: WARNING: mmap() of a fixed address required but not supported
# configure: WARNING: mmap() of files required but not found
# configure: WARNING: --enable-bindings=ocaml specified, but OUnit 2 is not inst                             alled. Tests will not run
# + make -C bindings all SYSTEM_LLVM_CONFIG=llvm-config
# gcc.exe: error: /home/setup/.opam/system/build/llvm.3.7/bindings/ocaml/llvm/ll                             vm_ocaml.c: No such file or directory
# gcc.exe: fatal error: no input files
# compilation terminated.
# /usr/bin/rm: cannot remove '/home/setup/.opam/system/build/llvm.3.7/build/bind                             ings/ocaml/llvm/Release+Asserts/llvm_ocaml.d.tmp': No such file or directory
# make[2]: *** [/home/setup/.opam/system/build/llvm.3.7/build/bindings/ocaml/llv                             m/Release+Asserts/llvm_ocaml.o] Error 1
# make[1]: *** [all] Error 1
# make: *** [ocaml/.makeall] Error 2



=-=- Error report -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
The following actions failed
  - install llvm 3.7
No changes have been performed

=-=- llvm.3.7 troubleshooting -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=> This package relies on external (system) dependencies that may be missing.
   `opam depext llvm.3.7' may help you find the correct installation for your
   system.

Я использую версию 3.8.0 llvm и версию 4.02.3 OCaml по этой ссылке.

Я на правильном пути? Что мне нужно сделать, чтобы это исправить?

1 ответ

Как я уже ответил на ваш вопрос LLVM Tutorial OCaml Compilation Assembler Error, ваш лучший способ не использовать Windows.

OPAM теперь можно использовать в Cygwin OCaml или даже в MinGW OCaml (используя бинарный файл Cygwin opam), но пакеты в репозитории OPAM не тестируются в этих средах. Просто избегайте их, если у вас нет опыта разработки программ OCaml в Windows.

Если вы придерживаетесь Windows, то проверьте сборку на C:\cygwin64\home\setup\.opam\system\build\llvm.3.7, Должны быть файлы журнала stdout и stderr, которые могут помочь понять, что произошло.

Другие вопросы по тегам