我正在尝试在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
但是,opam 可能会尝试安装您的系统上不可用的最新版本,因此请选择您拥有的特定版本并执行以下操作(假设您有 llvm-3.8
):
opam install conf-llvm.3.8
opam install llvm --criteria=-changed
(-criteria
标志将阻止 opam 将 conf-llvm 升级到最新版本)
一旦成功,您就可以轻松编译您的程序,无需任何额外的脚手架。
创建并构建您的项目
创建一个全新的文件夹,例如,
mkdir llvm-project cd llvm-project
创建一个示例应用程序(借用我在网上找到的一些教程):
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
将其编译为字节码
ocamlbuild -pkgs llvm,llvm.bitreader test.byte
或 native 代码
ocamlbuild -pkgs llvm,llvm.bitreader test.native
运行它
./test.native mycode.bc
关于functional-programming - 无法在ocaml中打开Llvm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50548547/