我在OCaml解释器和OCaml编译器之间遇到了一些问题。谁能帮我?非常感谢你!
我刚刚根据https://github.com/polazarus/z3-installer的说明成功编译了Z3的OCaml绑定。他们使用旧的Z3版本:4.1
首先,我更改文件Makefile.ocaml:
# Findlib package installation obtion, for instance -destdir /usr/lib/ocaml
OCAMLFIND_INSTALL_FLAGS = -destdir /home/maidinh/.opam/4.01.0/lib/
然后,我编译它:
sudo apt-get install camlidl
sudo make
sudo make install
我不知道为什么它在跑步时失败了#make;#39;没有' sudo'权限:
最后,我通过运行OCaml解释器4.01.0来测试Z3的OCaml绑定:
./ocaml
#use "topfind";;
#require "z3";;
open Z3;;
Z3.mk_context;;
- : (string * string) list -> Z3.context = <fun>
成功!
但是,我的程序无法使用OCaml编译器运行。这是我的计划:
let _ = print_endline "Start" in
let _ = Z3.mk_context [] in
()
然后,我编译并运行:
ocamlfind ocamlc -linkpkg -package z3 -c main.ml -o main.cmo
ocamlfind ocamlc -linkpkg -package z3 -o main main.cmo
./main
Start
Error: internal error
任何人都可以向我解释错误吗?非常感谢你!
答案 0 :(得分:1)
简而言之,Z3 4.1的ML绑定是错误的。我在z3-installer的存储库上将其恢复到4.0。编译:
ocamlfind remove z3
opam install camlidl
git clone https://github.com/polazarus/z3-installer.git # fresh clean install
cd z3-installer
make
sudo make lib-install
make ocaml-install
请注意,API略有不同,您的示例应为:
let _ = print_endline "Start" in
let _ = Z3.mk_context_x [||] in
()
要安装和编译带有ML绑定的新Z3,您应该查看Drup's Z3 overlay。他解释了如何编译Z3。