【问题标题】:Cannot compile z3 library in Visual Studio 2008无法在 Visual Studio 2008 中编译 z3 库
【发布时间】:2015-06-11 20:35:42
【问题描述】:

我想在当前使用 VS2008 (.net framework 3.5) 构建的 winforms 应用程序中使用 z3 4.4 托管 API。我可以将 z3 与 .net 4.x 应用程序一起使用而不会出现问题,但由于与 z3 无关的原因,目前不可行将当前应用程序升级为使用 .net 4.x。我能够构建 api 并在我的应用程序中包含 Microsoft.z3.dll。但是,当从 VS2008 命令提示符编译 z3 C++ 库时,我收到许多错误,试图将 const_iterator 隐式转换为迭代器。示例:

duality_solver.cpp ..\src\duality\duality_solver.cpp(243):错误 C2440:“正在初始化”:无法从“std::_Tree<_traits>::const_iterator”转换为“std::_Tree<_traits>::iterator” 和 [ _Traits=std::_Tset_traits,std::allocator,false> ] 没有构造函数可以采用源类型,或者构造函数重载决议不明确

将 std::_Tree<_traits>::iterator 更改为 std::_Tree<_traits>::const_iterator 可以消除这些错误。但是,生成的 z3lib.dll 复制到 VS2008 项目的 bin\x86 目录总是会产生运行时错误:

无法加载 DLL 'libz3.dll':找不到指定的模块。 (HRESULT 异常:0x8007007E)

如果 libz3.dll 与 api dll (Microsoft.z3.dll) 位于同一目录中,也会发生这种情况。我还确保 z3 和我的项目是为相同的平台 (x86) 构建的。 使用 VS2013 构建的 libz3.dll 会在 VS2008 项目中产生与上述相同的运行时错误。 z3 版本 4.4.0 可以在 Visual Studio 2008 项目中使用吗?如果是这样,如何确保可以加载libz3.dll以避免出现上述错误?

【问题讨论】:

    标签: visual-studio-2008 z3


    【解决方案1】:

    我们不在 VS 2008 上构建和测试,而且在某些情况下会 点移动到不支持的 C++ 语言功能 在旧平台上(但支持跨操作系统和 较新的编译器)。

    在我的一台机器上,我使用 VS2013 的社区(免费)版本来构建 Z3。

    【讨论】:

    • 谢谢@NikolajBjorner。我想我需要决定是否可以等到我的项目准备好迁移到现代开发平台或找到我现在可以使用的 SMT 求解器。
    • 如果您还使用 Windows XP 或更早版本,Z3 将无法在这些平台上运行,无论 Visual Studio 的版本如何,因为 .dll 使用线程本地存储,而不是在这些旧平台上受支持,因此在较新平台上构建的 DLL 也不起作用。在这种情况下,系统只会抱怨无法加载 DLL,但没有任何进一步的细节。
    • 您也可以从这里下载旧版本的 Z3:research.microsoft.com/en-us/um/redmond/projects/z3/old/…
    猜你喜欢
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2012-09-24
    • 1970-01-01
    • 2011-03-08
    相关资源
    最近更新 更多