2010-11-18 54 views
0

根據http://msdn.microsoft.com/en-us/library/h21twfw7(v=VS.100).aspx(對於Visual Studio 2010)strstreambuf已棄用。我認爲棄用意味着聲明/定義仍然可用,但在不久的將來將會過時(或刪除)該庫。但嘗試鏈接到該類失敗與Visual C++ 2010項目。這個問題是兩部分:strstreambuf在Visual C++ 2010中不推薦使用 - 是否仍可以鏈接到它?

  • 有人可以確認我的strstreambuf是否真的完全從Visual C++ 2010庫中刪除?運行一些簡單的診斷程序,我無法在「C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ lib \ msvcprt.lib」(適用於VS2010)中找到定義,而定義存在於「C:\ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ msvcprt.lib「(對於VS2005)。要找出是否提供了定義,我在.lib上使用了dumpbin.exe。我還檢查了「C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ include \ strstream」,並指出導出該類的_CRTIMP2_PURE(aka __declspec(dllimport))關鍵字在2010年消失了。
  • 我還能鏈接到strstreambuf,即使它已在Visual C++ 2010中從Visual C++ 2010項目中棄用?

一些背景知識對我的需求:

  • 我使用鏈接到的strstreambuf第三方私有軟件庫。專有的lib可能是使用Visual C++ 2005構建的,我的項目目前也在Visual C++ 2005中。
  • 在升級我的項目到Visual C++ 2010中,我們意識到,我們不能鏈接到第三方專利庫以來的strstreambuf是採用Visual C不再提供++ 2010

感謝

回答

3

原因你無法將VS2005中構建的C++庫與VS2010鏈接起來並不是因爲strstreambuf被棄用,而是因爲運行時庫二進制文件因新編譯器版本而改變。其中的一部分是C++標準庫的幾個部分已經被轉換爲僅標頭。

將一個編譯器構建的C++代碼與另一個編譯器的運行時庫鏈接起來是一個非常糟糕的主意;你真的想確保你建立的所有東西都可以用相同的編譯器版本進行靜態鏈接,否則可能會導致混亂。

你最好的(唯一的)希望是讓所述第三方庫的供應商咳嗽用VS2010構建的版本。

+0

@ timo-geusch謝謝。我相信第三方供應商最終會推出一個新版本的庫,但我希望我不必等。我只是假設strstreambuf是問題,因爲有75個鏈接器錯誤都指向strstreambuf類。您對「C++標準庫的多個部分已被更改爲僅標頭」的評論很有意思。你會碰巧有鏈接記錄這樣的變化嗎?我可以仔細研究它們,看看strstreambuf是否是它們的一部分。 – ossandcad 2010-11-18 22:11:38

+0

我不認爲MS網站上有一個列表顯示哪一個已經改變。我只知道只有標題的「問題」,因爲它可以在不同情況下顯示;有一堆鏈接錯誤錯誤報告提到他們,我認爲strstreambuf就是其中之一。 – 2010-11-19 02:28:09

相關問題