Не могу открыть Llvm в ocaml - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь использовать привязку llvm в ocaml, в моем файле test.ml у меня есть одна строка кода:

open Llvm

Когда я запускаю команду

ocamlbuild -use-ocamlfind test.byte -package llvm

Я получаю этот результат:

+ ocamlfind ocamldep -package llvm -modules test.ml > test.ml.depends
ocamlfind: Package `llvm' not found
Command exited with code 2.
Compilation unsuccessful after building 1 target (0 cached) in  00:00:00.

Что я сделал не так в этом?Спасибо.

Кстати, файл _tag содержит:

"src": traverse
<src/{lexer,parser}.ml>: use_camlp4, pp(camlp4of)
<*.{byte,native}>: g++, use_llvm, use_llvm_analysis

myocamlbuild.ml содержит:

open Ocamlbuild_plugin;;
ocaml_lib ~extern:true "llvm";;
ocaml_lib ~extern:true "llvm_analysis";;
flag ["link"; "ocaml"; "g++"] (S[A"-cc"; A"g++"]);;

1 Ответ

0 голосов
/ 31 мая 2018

Я не знаю, почему используемые вами инструкции настолько сложны.Вам не нужно делать ничего подобного, чтобы использовать привязки llvm в OCaml, при условии, что вы установили их через opam.

Вот рецепт:

Установка привязок llvm через opam.

это может быть так же просто, как

opam install llvm

Однако операционная система может попытаться установить последнюю версию, которая недоступна в вашей системе, поэтому выберите конкретную версию, которая у вас есть, и выполните следующие действия.(предположим, у вас есть llvm-3.8):

opam install conf-llvm.3.8
opam install llvm --criteria=-changed

(флаг -criteria не позволит оператору обновлять conf-llvm до последней версии)

Как только это удастся, вы можете легкокомпилируйте ваши программы без каких-либо дополнительных лесов.

Создание и создание проекта

  1. создание новой новой папки, например,

    mkdir llvm-project
    cd llvm-project
    
  2. создание примера приложения(заимствовано из некоторого учебника, который я нашел в Интернете):

    cat >test.ml<<EOF
    open Llvm
    
    let _ =
      let llctx = Llvm.global_context () in
      let llmem = Llvm.MemoryBuffer.of_file Sys.argv.(1) in
      let llm = Llvm_bitreader.parse_bitcode llctx llmem in
      Llvm.dump_module llm ;
      ()
    EOF
    
  3. скомпилируйте его для байт-кода

    ocamlbuild -pkgs llvm,llvm.bitreader test.byte
    

    или в собственный код

    ocamlbuild -pkgs llvm,llvm.bitreader test.native
    
  4. запустить его

    ./test.native mycode.bc
    
...