2010-06-16 74 views
4

当我刚从VS2003 - > VS2008更新(并清理)的程序运行程序时,出现此R6034错误。更确切地说:R6034:一个应用程序试图加载C运行时库不正确

“R6034:一个应用程序做出了 试图载入C运行时库 不正确”

它似乎在跑步时几乎在同一个地方发生。我不知道为什么,但我尝试了一些我在googleing这个时发现的建议。例如添加msvc dll,但没有奏效。

为什么会出现这种错误的任何帮助将是伟大的。谢谢

+0

我得到了相同的错误,只是使用mingw构建应用程序,然后加载了一个更复杂一点的DLL。 Windows正在使事情变得复杂一点,它需要一个简单的快速命令行编译Linux风格。 – jakobengblom2 2017-02-28 13:09:47

回答

2

从Visual Studio 2005开始,您必须使用清单文件引用C运行时间。 通过将它们放在路径中引用DLL将会给出上述错误。

清单文件看起来像这样:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?> 
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.4053' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> 
    </dependentAssembly> 
    </dependency> 
</assembly> 

可以使用MT命令清单集成在应用程序的资源,但是这不是强制性的。它也可以拥有除应用程序之外的清单(如MYAPP.EXE.MANIFEST)。

+0

没关系,这有点道理。当我使用vs2008编译一个新项目最终嵌入到我的.exe中,但是对于这个迁移项目,该部分完全不存在。我错过了一些项目设置的地方?或者我如何在那个项目中获得它呢? – mattias 2010-06-16 15:08:35

+0

我认为某些C/C++包含文件包含#pragma,它添加了一个链接器命令,以便链接器生成清单。在C/C++包含文件中查找/ manifestdependency。这些应该会触发清单文件的创建。 – Patrick 2010-06-16 15:20:52

+0

没有找到类似的东西。想知道制作一个新的vs2008项目并手动完成所有事情是否更好。 – mattias 2010-06-17 07:32:55

0

下面的测试程序:

#include <iostream> 
#include <crtdefs.h> 

void main() 
{ 
std::cout << "Hello World" << std::endl; 
} 

使用这些命令(Visual Studio 2005中)编译:

cl /EHsc /MD /c test.cpp 
link test.obj 

创建可执行文件(TEST.EXE)和一个清单文件(TEST.EXE。 MANIFEST),看起来像这样:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?> 
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.4053' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> 
    </dependentAssembly> 
    </dependency> 
</assembly> 

我没有尝试过这与VS2008,但这应该可能wo rk也是如此。

希望这足以让你开始。

+0

仍然不适用于我的“迁移”项目。但是当我正在制作一个新的时候,我将重新制作整个解决方案。标记你的第一个答案,因为它基本上是答案。谢谢! – mattias 2010-06-17 15:01:26

相关问题