2011-06-08 13 views
2

我建立使用Microsoft Visual C++ 2005庫的主要更新後的應用程序,我得到我的清單文件中的以下條目:確定依賴的來源MSVC的清單發生器

<dependency> 
    <dependentAssembly> 
    <assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> 
    </dependentAssembly> 
</dependency> 

然而,當,我在結果可執行文件上使用了Dependency Walker,我沒有在列表中看到MSVC80D.DLL,這對我來說有點令人驚訝。

我也嘗試將鏈接器設置爲「詳細」模式,以查看它是否會告訴我清單中指示的依賴項來自哪裏。唉,那裏的信息並沒有說明問題。

我也瀏覽了我鏈接的所有庫,看看它們中的任何一個是否使用調試CRT。據我所知,他們都沒有。

如何確定導致此問題的庫是什麼?當我按照原樣分發可執行文件時,我得到了一個並行錯誤,可能是因爲自動生成的清單中存在此條目。

非常感謝您提供的任何幫助......經過幾天的試圖弄清楚發生了什麼,我開始對這個問題感到非常沮喪。

+0

我花了一天的時間試圖找出問題,並認爲我可以澄清。在這一點上似乎很清楚,依賴不是來自任何實際的庫。我認爲我不明白的一件大事是:是否有可能導致清單生成器包含調試CRT的其他設置? – 2011-06-09 02:16:42

+0

另一個更新:我決定建立一個簡單的項目,並開始包括我一次使用的庫。使用此方法,我確定libjpeg正在導致MSVC將「DebugCRT」行添加到清單。 奇怪的是,dumpbin在libjpeg.lib文件中顯示不依賴於MSVCRTD。可以肯定的是,我使用nodebug = 1選項重建了libjpeg,並得到了相同的結果。 我現在的問題是:爲什麼當我添加libjpeg時,清單生成器會將DebugCRT添加到清單中,即使庫本身似乎不依賴於調試CRT? – 2011-06-09 03:30:16

回答

0

我想我找到了解決我的問題。我決定構建一個小測試應用程序,然後添加我一次使用的庫。使用這種方法,我特別隔離了一個似乎導致問題的庫。我確定該庫沒有使用dumpbin顯示調試依賴關係,但另一方面,我已經能夠通過重建該庫來消除不需要的清單行。

+1

庫有可能使用#pragma導致在清單中生成此條目。如此處所述:http://blogs.msdn.com/b/oldnewthing/archive/2007/05/31/2995284.aspx – 2011-06-30 08:42:21