2015-05-07 213 views
0

我正在使用Visual Studio 2013開發C++靜態庫* .lib。我得到了使用Visual Studio 2010編譯器編譯庫的請求,但是我沒有將它安裝在開發人員計算機上。在Visual Studio 2013中編譯靜態庫

編譯動態庫* .dll時,可以使用將C運行時打包到dll中的開關/ MT。動態庫因此變得更大。但是,當我使用/ MT開關時,靜態庫變得更小(5MB - > 4.9MB),這與我預期的相反。

問題: 1.我可以在Visual Studio 2013中構建靜態庫,以便稍後可以由Visual Studio 2010編譯器使用它嗎? 2./MT開關是否正確嗎?

回答

2

靜態庫通常只與構建它們的工具集兼容。對於任何使用標準C++庫/ STL的情況尤其如此,這就是爲什麼新版本的VS將嵌入_MSC_VER標記用於STL標頭的任何用途,如果您試圖將它們混合在一起,將會產生鏈接時錯誤。

使用與使用它們的項目相同的CRT設置(/ MT,/ MD,/ MTd,/ MDd)構建靜態庫也很重要。

使用C++或COM導出使用CRT DLL的DLL實際上是唯一可以安全地與不同版本的編譯器混合使用的'穩定'庫。否則,您應該爲每個要支持的版本獲取工具集,並構建.lib所需的所有風格。