2014-03-30 52 views
1

我有一個軟件與幾個可執行文件,這取決於VC++ 2012和VC++ 2010(msvc110.dll,和msvc100.dll,類似的東西)。我想將我的應用程序與2012版可再發行版(即7mb)一起發佈,並避免使用2010可再發行組件,因此我減小了安裝程序的大小。Visual C++ 2012可再發行版向後兼容2010版本嗎?

我的問題是,2012版本的可再發行版是否向後兼容2010版本?或者我應該將它們都嵌入到安裝程序中?

請注意,可執行文件已經編譯完成,而且我沒有使用相同版本編譯它們的源代碼。

+1

不是,C++ 11帶來了很多變化,標準的C++庫實現發生了巨大的變化。而最重要的是,你的程序與它不兼容,它堅持要找到msvcr110.dll,而不會忍受msvcr100.dll。這是一件好事。在一個程序中混合CRT版本通常是一個非常糟糕的主意。 –

+0

@HansPassant如果需要解釋一點,並將其作爲答案發布,所以我可以將其標記爲已接受。另外,非常感謝! – Pacha

回答

2

不幸的是,如果您沒有發佈該模塊進行編譯的運行時間(如果它在目標系統上不存在),那麼您的應用程序將會失敗。它如何失敗取決於你如何構建你的應用程序(例如,鏈接的lib DLL,與OpenLibrary模塊)。

至於兼容性,我們的團隊也有類似的問題,所以我使用VS2005,VS2010和VS2012模塊編寫了實驗測試代碼,其中一個模塊創建std :: vector(etc)並將其傳遞給另一個模塊以供使用。它失敗了。非常容易重現這個實驗。

您將需要同時出貨。

1

您有幾個exe文件,只是將它們全部發送或將其標記爲您的應用程序的要求。 DLL不大。 如果您可以重建應用程序以對齊它們,以便它們使用相同的crt,那會更好。