2015-06-11 23 views
0

我想在當前使用VS2008(.net framework 3.5)構建的winforms應用程序中使用z3 4.4託管API。我可以在.net 4.x應用程序中使用z3而不會出現問題,但是升級當前應用程序以使用.net 4.x目前由於與z3無關的原因而不可行。我能夠構建API並在我的應用程序中包含Microsoft.z3.dll。但是,當從VS2008命令提示符編譯z3 C++庫時,出現許多錯誤,其中嘗試將const_iterator隱式轉換爲迭代器。例如:無法在Visual Studio 2008中編譯z3庫

duality_solver.cpp ..\src\duality\duality_solver.cpp(243) : error C2440: 'initializing' : cannot convert from 'std::_Tree<_Traits>::const_iterator' to 'std::_Tree<_Traits>::iterator' with [ _Traits=std::_Tset_traits,std::allocator,false> ] No constructor could take the source type, or constructor overload resolution was ambiguous

更改的std :: _樹< _Traits> ::迭代器到std :: _樹< _Traits> ::爲const_iterator消除這些錯誤。然而,拷貝到VS2008項目的bin \ x86目錄複製產生的z3lib.dll必然產生運行時錯誤:

Unable to load DLL 'libz3.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

也會出現這種情況,如果libz3.dll是在同一目錄下API DLL( Microsoft.z3.dll)。我也確保了z3和我的項目是爲相同的平臺(x86)構建的。 使用VS2013構建的libz3.dll在VS2008項目中產生上述相同的運行時錯誤。 Visual Studio 2008項目中是否可以使用z3 4.4.0版?如果是這樣,我如何確保可以加載libz3.dll以避免上述錯誤?

回答

0

我們不會對VS 2008構建和測試,而且會在某個 點移動到不老平臺上支持 (但跨操作系統和 新的編譯器支持)C++語言特性。

在我的一臺機器上,我使用社區(免費)版本的VS2013來構建Z3。

+0

謝謝@NikolajBjorner。我想我需要決定是否可以等到我的項目準備好遷移到現代化的開發平臺或找到我現在可以使用的SMT求解器。 – hawillk

+0

由於您也使用Windows XP或更早的版本,因此無論Visual Studio的版本如何,Z3都無法在這些平臺上工作,因爲.dll使用的線程本地存儲在舊版平臺上不受支持,所以建立在較新平臺上的DLL也不起作用。當這種情況發生時,系統會簡單地抱怨無法加載DLL,但沒有進一步的細節。 –

+0

您也可以從這裏下載舊版本的Z3: http://research.microsoft.com/en-us/um/redmond/projects/z3/old/older_z3.html –

相關問題