2010-02-28 83 views
2

這裏是我的情況:如何解決這個MS運行時的DLL加載運行時錯誤(R6034)

我有一個C項目,許多圖書館鏈接(我沒有寫這個應用程序),並且它也隨MSVCR71.dll和MSVCP71.dll。即使沒有這些DLL,該程序在我的系統上運行良好,該系統安裝了MS VS2005(實際上使用MSVCR80.dll和MSVCP80.dll)。

我已將此應用程序與其他庫鏈接,並在我的系統上編譯。現在,在與這些庫鏈接後,應用程序無法啓動,因爲它無法加載MSVCR80.dll和MSVCP80.dll ......我非常奇怪。

Loader向我展示了錯誤R6034,應該使用清單文件來解決構建應用程序的問題。

這個應用程序有什麼問題?


確認問題是由引入的庫引入的。我可以在沒有清單或靜態的情況下編譯這些庫嗎?

仍然好奇,爲什麼應用程序,而聯新庫沒有找到MS運行時的DLL ...

回答

1

是將msvcp71.dll由Visual Studio 2002 MSVCR80.DLL使用的DLL是Visual Studio 2005的 所以,當你用VS2005重新編譯這個應用時,你會得到新的dll依賴關係。 你不能用清單來解決它 - 你應該在Visual Studio 2002中重新編譯它,或者只是把這些新的DLL放到應用程序所在的同一個文件夾中。

編輯: 是的,你可以鏈接你的應用程序與靜態CRT庫,以避免外部依賴這些DLL。但是,如果您鏈​​接的DLL或庫中的一個使用動態CRT,則可能無法做到這一點 - 那麼您應該使用靜態CRT重新編譯它們。

+0

這正是我所做的。當我鏈接新的庫(在同一系統上使用VS2005編譯)時,該應用程序無法加載MSVCR80.dll。顯示錯誤R6034,因爲我已將這些DLL複製到應用程序的工作目錄中。 任何想法? – Luca

+0

好吧,現在我明白了。 MSDN顯示關於此錯誤的非常具有描述性的文本: 「應用程序嘗試加載C運行時庫而不使用清單,這是一種不受支持的加載Visual C++ DLL的方式,您需要修改應用程序以使用有關更多信息,請參閱產品文檔中的「Visual C++庫作爲共享並行程序集」主題。「 所以,只需在項目設置中啓用默認清單創建,一切都會正常工作。你不需要特殊的清單 - 只是一些清單。 – Oleg

+0

其實應用程序使用清單(使用/ MANIFEST/MANIFESTFILE:...\asdasd.exe.intermediate.manifest「)。或者我錯了嗎?其他DLL(它與pthreadVC2.lib glut32.lib鏈接glew32.lib Cg.lib CgGL.lib Half.lib Iex.lib IlmImf.lib IlmThread.lib Imath.lib zdll.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32。 lib uuid.lib odbc32.lib odbccp32.lib ...) – Luca