有許多C++庫(大多數?)隨特殊的二進制文件爲每個Visual C++版本(2003,2005,2008,2010)構建。爲什麼我需要爲每個Visual C++版本構建特殊庫(二進制文件)?
將Visual C++ 2008的C++庫與Visual C++ 2010連接起來的問題是什麼?
有許多C++庫(大多數?)隨特殊的二進制文件爲每個Visual C++版本(2003,2005,2008,2010)構建。爲什麼我需要爲每個Visual C++版本構建特殊庫(二進制文件)?
將Visual C++ 2008的C++庫與Visual C++ 2010連接起來的問題是什麼?
每個Visual Studio版本都包含C和/或C++運行時的更新版(和不同版本)。 This msdn page(根據:「存在什麼問題......」)很好地解釋了問題所在。這裏描述的是msvcrt.dll < - > msvcrt10.dll對每個msvcrtXX.dll都有效。
它不應該出現任何值得注意的問題,但建議使用相應版本的VS的二進制版本。
通常的問題是,使用不同版本的Visual Studio生成的代碼使用不同版本的運行時庫。
根據庫的設計方式,這通常會導致問題,因爲有多個版本的(例如)分配和釋放函數,並且在一個運行時庫中分配的指針傳遞給它時可能很容易發生堆錯誤一個不同的釋放函數。無論運行時庫是動態還是靜態鏈接,都會發生這種情況。
即使通過良好的庫設計避免了這個問題,但在同一個程序中擁有多個C堆仍然效率不高。
存在與運行時庫功能,依賴於靜態地保持信息的其他潛在問題,如srand
和rand
,語言環境和醜陋的傳統功能,如strtok
。
即使可以跨不同版本的Visual Studio進行鏈接,它通常也不會更安全。