【问题标题】:Use Z3 managed API on Mono在 Mono 上使用 Z3 托管 API
【发布时间】:2012-12-27 17:58:07
【问题描述】:

我们有一个使用 Z3 API v4.0 的 .NET 项目。我们希望能够在 Mono 上编译和运行该项目。

该项目使用 MonoDevelop 编译良好。但是,当我们运行或调试程序时,出现了如下异常

System.DllNotFoundException: z3.dll
  at (wrapper managed-to-native) Microsoft.Z3.Native/LIB:Z3_mk_context_rc (intptr)
  at Microsoft.Z3.Native.Z3_mk_context_rc (IntPtr a0) [0x00000] in <filename unknown>:0
  at Microsoft.Z3.Context..ctor () [0x00000] in <filename unknown>:0
  at <StartupCode$Nqueens>.$Nqueens..cctor () [0x00000] in /path/to/file:15

如果重要的话,我们使用 Mac OS X 和 Mono 3.0.2/MonoDevelop 3.0.5。

有人有在 Mono 上使用 Z3 API 的经验吗?

这听起来很奇怪,但我们的情况描述如下。我们有一门使用 Z3 的课程,所有实验室计算机都安装了 Windows 和 .NET 框架。但是,一些在自己的计算机(Linux、Mac)上工作的学生应该能够编译和运行该项目。


总结:

感谢@Leo 的建议,我可以在 MonoDevelop 下运行项目,只需进行一些更改:

1) 创建App.config文件,在configuration标签下添加如下信息:

<dllmap dll="z3.dll" target="libz3.dylib" os="osx" cpu="x86"/>

2) 从 Mac OS X 发行版中复制 libz3.dylib(或为较新版本从源代码构建)并确保在编译时将共享库和 Microsoft.Z3.dll 复制到输出文件夹(bin/Debug on Debug 模式)该项目。为此,我们在项目文件中手动添加ItemGroup标签:

<None Include="libz3.dylib">
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  <Visible>False</Visible>
</None>

Linux 上libz3.so 的过程应该类似。

我们尝试了各种不同理论的例子。到目前为止没有发生错误或异常。

【问题讨论】:

  • 为什么没有评论的反对票?
  • 仅供参考,我在 Linux (Ubuntu) 上使用 Mono 和 libz3.so(从 codeplex 上的不稳定分支编译)进行了尝试,到目前为止它似乎也可以正常工作。
  • @Taylor:谢谢。它确实使我们的学生在课程中的体验更好。

标签: .net mono z3


【解决方案1】:

我们从未考虑过这种情况。我们通常告诉 Linux/OSX 用户使用其他 API:C/C++、Python、OCaml 或 Java。 Java API 还不是正式版本的一部分,但它会在 v4.3.2 中。它与 .Net API 非常相似。如果他们正在编写 C# 代码,那么迁移到 Java API 应该很容易。 您可以使用

获取当前候选版本的源代码
git clone https://git01.codeplex.com/z3 -b rc

相当稳定。为了编译它,我们使用了

cd z3
python scripts/mk_make.py
cd build
make

如果您使用 F#,您还可以考虑 Christoph 正在开发的新 OCaml API(分支 ml-ng http://z3.codeplex.com)。它和 .Net API 一样好。

更复杂的选择是破解/修改 Z3 make 文件生成器 (scripts/mk_util.py) 以在 Linux 和 OSX 上构建 .Net API。我对 Mono 不熟悉,但应该可以。我猜你必须使用在 Z3 Java API 中使用的相同技巧。需要更改的一件事是要加载的共享库(Linux 上的libz3.so 和 OSX 上的libz3.dylib)而不是 Z3 DLL。

【讨论】:

  • 谢谢。我确实使用 F#。新 OCaml API 的好消息;我觉得它落后于 .NET 版本。我会尝试一下,让你知道。
  • 我可以在 Mono 上运行该项目。我在问题的最后部分总结了它。
  • 太好了,感谢您报告如何操作。我相信它会帮助其他人。
猜你喜欢
  • 2012-01-23
  • 2011-10-09
  • 2016-10-11
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 2012-06-19
相关资源
最近更新 更多