2011-06-20 57 views
1

背景:我正在構建一個大型仿真框架的插件。我正在編譯一個使用Visual Studio C++ 2010的DLL。給出段錯誤的多個CRT

經過大量的搜索和搜索之後,我相信我有一個問題源於有多個版本的CRT鏈接到我的DLL。我在(來自msvcr100.dll)中獲得了段錯誤,在函數_CRTIMP PFLS_GETVALUE_FUNCTION __cdecl __set_flsgetvalue()中。閱讀this線程(有多個問題討論,但最後提到這個功能)是我的想法,如果我檢查我的項目的鏈接部分,我看到msvcr90.dll,'msvcp100d.dll and msvcr100d.dll`。

我正在使用幾個外部庫,並且我已經能夠使用VS2010重新編譯除了其中一個以外的所有庫。但最後一個不是開源的(它是一個屬於框架的庫),我想這就是依賴關係的來源。但我不確定,我怎麼能檢查這個?

鑑於我關於依賴關係的來源,我該怎麼做?

+1

您可以使用Dependency Walker來查看該DLL依賴於什麼。 – sharptooth

+0

如果您構建發佈版本(或使用剩餘依賴項的調試版本),則可能會有問題。混合調試和釋放不會起作用,但有時可以混合使用不同版本的CRT DLL。 –

回答

2

您正在鏈接到Visual Studio 2008的發佈運行時和Visual Studio 2010的調試運行時......您不應該混用並匹配通常的發行版和調試版。如果你需要調試VC9,你需要安裝Visual Studio 2008(在2010年之前安裝以保證安全)

但是,我可能只是重建所有項目和依賴VC10。如果您的系統僅在發佈時缺失,您可能無法安裝redist for VC9

編輯:鏈接到Dependency Walker這對確定缺失或衝突的依賴關係是非常寶貴的。

+0

正如我寫的,我已經重新編譯了所有可能的庫。但是,我還設法將預編譯的.DLL與新編譯的.LIB混合使用。 DependecyWalker拿起了這個,瞭解Dependecy Walker值得接受:) – carlpett