无法在ocaml中打开Llvm

Can't open Llvm in ocaml

我正在尝试在 ocaml 中使用 llvm 绑定,在我的文件 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++"]);;

我不知道为什么您使用的说明如此复杂。如果您已通过 opam 安装它们,则无需执行此类操作即可在 OCaml 中使用 llvm 绑定。

食谱如下:

通过 opam 安装 llvm 绑定。

它可以像

一样简单
opam install llvm

但是,opa​​m 可能会尝试安装您系统上不可用的最新版本,因此请选择您拥有的特定版本并执行以下操作(假设您有 llvm-3.8):

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

-criteria 标志将阻止 opam 将 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