z3 ocaml绑定不起作用(Windows 7)

时间:2011-09-03 12:46:32

标签: binding windows-7 ocaml z3

我没有在Windows 7上使用z3 ocaml绑定。 这是我遵循的过程。

  1. 已安装的Objective Caml版本3.11.0(Microsoft工具链)
  2. 已安装的camlidl-1.05(使用Microsoft Visual Studio 2008 + cygwin构建)
  3. 已安装z3-3.0
  4. 通过运行“build.cmd”构建z3 ocaml绑定。构建成功。
  5. 将“build.cmd”生成的文件从z3 / ocaml复制到ObjectiveCaml / lib
  6. 启动ocaml interactive并加载“z3.cma”

    # #load "z3.cma";;
    Characters -1--1:
      #load "z3.cma";;
    
    Error: The external function `get_theory_callbacks' is not available
    
    # Z3.mk_context;;
    Characters -1--1:
      Z3.mk_context;;
    
    Error: The external function `camlidl_z3_Z3_mk_context' is not available
    
  7. 有人可以给我一些提示吗?

    编辑1: 在“Z3-3.0 \ examples \ ocaml”中构建示例:

    摘自 build.cmd

    set XCFLAGS=/nologo /MT /DWIN32
    ocamlopt -ccopt "%XCFLAGS%" -o test_mlapi.exe -I ..\..\ocaml ole32.lib %OCAMLLIB%\libcamlidl.lib z3.cmxa test_mlapi.ml
    

    Visual Studio 2008命令提示符中执行 build.cmd 时遇到以下错误

    ** Fatal error: Cannot find file "/nologo"
    File "caml_startup", line 1, characters 0-1:
    Error: Error during linking
    

    在删除-ccopt "%XCFLAGS%"时,它可以正常工作。生成的 exe 也按预期执行。 (注意我在PATH中有flexdll)。知道为什么会这样吗?

2 个答案:

答案 0 :(得分:3)

OCaml 3.11及更高版本通过flexdll调用链接器,它不需要或不知道“/ nologo / MT / DWIN32”标志。 ocaml \ build.cmd脚本测试ocaml版本并适当地设置XCFLAGS。我想应该改变例子\ ocaml \ build.cmd来做同样的事情。

如果我通过从Z3 ocaml绑定目录执行'ocamlmktop -o ocamlz3 z3.cma'创建自定义顶层,则使用顶层中的Z3对我有用。

答案 1 :(得分:2)

这对我有用(Windows 7):

  1. 下载并安装Ocaml 3.08+
  2. 下载并安装Visual Studio C ++
  3. 下载并解压缩CamlIDL
  4. 下载并安装cygwin,同时安装在“选择包”窗口中选择 make 包以及您喜欢的linux编辑器包。
  5. 打开cygwin
  6. 在cygwin中转到CamlIDL根目录
  7. config/Makefile.win32重命名为config/Makefile
  8. 使用编辑器打开config/Makefile
  9. 修改BINLIBOCAMLLIB个变量
  10. 保存并退出Makefile
  11. 为cygwin设置c编译器:Invoking cl.exe (MSVC compiler) in Cygwin shell
  12. 从CamlIDL根目录运行make all
  13. 运行make install
  14. 退出cygwin
  15. 下载并安装Z3
  16. 下载并安装FlexDLL:http://alain.frisch.fr/flexdll.html
  17. 单击开始,指向我的电脑,右键单击,指向属性,指向系统保护,选择高级选项卡,指向环境值...
  18. C:\Program Files\flexdll\C:\Program Files\Microsoft Research\Z3-<version-number>\bin\添加到Path变量中
  19. 单击“开始”,指向“所有程序”,指向“Microsoft Visual Studio”,指向“Visual Studio工具”,然后单击“Visual Studio命令提示符”。
  20. 在Visual Studio命令提示符中转到C:\Program Files\Microsoft Research\Z3-<version-number>\ocaml
  21. 使用编辑器打开build.cmd
  22. 从最后两个命令中删除%CD%变量
  23. 保存并关闭build.cmd
  24. 运行build.cmd
  25. 将build.cmd生成的z3 *和libz3.lib文件从z3/ocaml复制到%OCAMLLIB%
  26. 运行ocamlmktop -o ocamlz3 z3.cma %OCAMLLIB%\libcamlidl.lib ole32.lib
  27. 运行ocamlz3.exe
  28. 输入#use "../examples/ocaml/test_mlapi.ml";;
  29. 尝试simple_example();;​

  30. 最后一步应该从Z3产生有效的输出。


  31. 对于Debian / Ubuntu:

    1. 安装Ocaml 3.09+ 1. sudo apt-get install camlidl​
    2. git clone git://github.com/polazarus/z3-installer.git (来自MickaëlDelahaye)
    3. cd z3-installer
    4. make #下载Z3并构建Ocaml库(本机和字节)
    5. sudo make install #install Z3二进制文件,DLL和Ocaml库
    6. sudo cp z3/lib/libz3.so /usr/lib/
    7. cd z3/ocaml
    8. ocamlmktop -o ocamlz3 z3.cma
    9. /ocamlz3
    10. 请尝试以下代码段:
    11.   

      let simple_example() =
         begin
         Printf.printf "\nsimple_example\n";
         let ctx = Z3.mk_context_x (Array.append [|("MODEL", "true")|] [||]) in
         Printf.printf "CONTEXT:\n%sEND OF CONTEXT\n" (Z3.context_to_string ctx);    Z3.del_context ctx;
         end;;
        simple_example();;​