【发布时间】: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