【发布时间】: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:谢谢。它确实使我们的学生在课程中的体验更好。