functional-programming - 无法在ocaml中打开Llvm

标签 functional-programming compiler-construction ocaml llvm

我正在尝试在ocaml中使用llvm绑定(bind),在我的文件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 绑定(bind)。

这是食谱:

通过 opam 安装 llvm 绑定(bind)。

它可能很简单

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
    

    或 native 代码

    ocamlbuild -pkgs llvm,llvm.bitreader test.native
    
  4. 运行它

    ./test.native mycode.bc
    

关于functional-programming - 无法在ocaml中打开Llvm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50548547/

相关文章:

java - 将嵌套 for 循环转换为维护数据的流

java - 在 ANTLR 文法中定义关键字

module - OCaml 中的好友模块

operators - OCaml 中的扫描和负整数文字

list - 将列表分成大小为N的组

javascript - Jquery 的函数式 javascript 示例,函数式 js 的大师

scala - 使用类型类建模生产者-消费者语义?

javascript - 将javascript代码转换为c代码

c - flex 如何识别子字符串?

installation - 如何在 (Arch) Linux x86_64 上安装 OCaml 核心库?