Zam的OCaml绑定:在OCaml解释器中成功,但在OCaml编译器中失败

时间:2014-09-23 01:17:14

标签: ocaml z3

我在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

任何人都可以向我解释错误吗?非常感谢你!

1 个答案:

答案 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。