【问题标题】:OCaml bindings for Z3: Success in OCaml interpreter, but fail in OCaml compilerZ3 的 OCaml 绑定:在 OCaml 解释器中成功,但在 OCaml 编译器中失败
【发布时间】:2014-09-23 01:17:13
【问题描述】:

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

我不知道为什么在没有'sudo'权限的情况下运行'make'会失败:

最后,我通过运行 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

谁能向我解释这个错误?非常感谢!

【问题讨论】:

  • OCaml,不是 Ocaml。请。
  • 我很抱歉。感谢您纠正我。
  • 您是否尝试过最新 Z3 (z3.codeplex.com) 附带的新绑定,而不是这个旧脚本(我可以说是我写的)? IMO,您也应该尝试使用 opam 安装 camlidl,而不是 sudo-ing 任何东西。
  • 是的,我在 z3.codeplex.com 上尝试过使用最新的 Z3,但编译失败。我也已经安装了 camlidl。你能帮帮我吗?

标签: ocaml z3


【解决方案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。

【讨论】:

  • 非常感谢!我已经尝试过 Drup 的 Z3 覆盖,但我不知道如何使用它。我按照他的手册:下载Z3官方源(master和ml-ng分支),然后运行make成功。但是我不知道如何使用他的代码,我应该将他的代码复制到某个地方吗?叠加层是什么意思?
  • 啊,您是说您刚刚使用 Z3 4.0 更新了您的项目吗?好的,我会试试的。谢谢!
  • 是的。此脚本适用于 Z3 的旧 OCaml API。所以它只能回到过去:/ 我没有彻底了解新的 API,但乍一看,界面和构建过程都发生了很多变化。如果有一天我有时间......但与此同时,这应该可以工作,但不会享受从那时起在 Z3 上所做的许多改进。
  • 谢谢!你能告诉我更多关于 Drup 的 Z3 覆盖的信息吗?无论如何我都试过了,但都失败了。
  • 不,我没有以任何方式尝试过。您应该尝试直接联系 Drup。
猜你喜欢
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
相关资源
最近更新 更多