2010-02-28 49 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

相关问题