如何将自行编译的LLVM OCaml绑定添加到OCaml运行环境中
手动编译LLVM13 rc4 OCaml绑定后dune无法识别的修复方案
- 首先确认当前opam开关与绑定安装路径匹配
执行opam switch show检查输出是否为4.12.0,如果开关不匹配,执行opam switch 4.12.0 && eval $(opam env)切换到对应开关并加载环境。 - 检查OCamlfind是否能识别绑定
dune依赖ocamlfind检索系统中安装的OCaml包,执行ocamlfind list | grep llvm,如果无任何输出,说明绑定的安装结构不符合findlib的规范。
常见问题是编译安装的绑定直接将库文件丢到了$HOME/.opam/4.12.0/lib/ocaml根目录,缺少独立的包目录和META描述文件:- 新建单独的llvm包目录:
mkdir -p $HOME/.opam/4.12.0/lib/llvm - 将所有LLVM绑定相关的库文件(.cmi、.cma、.cmxa、.a、.so后缀)移动到上述新建的llvm目录下
- 在llvm目录下新建
META文件,内容参考如下:name = "llvm"
version = "13.0.0-rc4"
description = "LLVM OCaml bindings"
requires = "str unix"
archive(byte) = "llvm.cma"
archive(native) = "llvm.cmxa" - 如有llvm_analysis、llvm_codegen等子模块,按相同规则新建对应子目录并编写子模块的META文件
- 新建单独的llvm包目录:
- 也可直接使用ocamlfind命令完成注册
整理好所有绑定文件和META后,在文件所在目录执行ocamlfind install llvm META *.cmi *.cma *.cmxa *.a *.so即可自动完成包注册,无需手动移动文件。 - 验证与收尾
再次执行ocamlfind list | grep llvm确认绑定已被识别,执行eval $(opam env)刷新环境变量后再运行dune build即可。
注意检查项目dune文件的libraries字段是否正确引用了llvm包,没有拼写错误或过高的版本约束
内容的提问来源于stack exchange,提问作者hackinghorn
相关产品推荐
相关产品推荐

