An application has made an attempt to load the C runtime library without using a manifest.
某个应用程序已经尝试不使用清单来加载 C 运行时库。这种加载 Visual C++ DLL 的方式不受支持。需要修改您的应用程序,以使用清单生成。有关更多信息,请参见产品文档中的主题“作为共享的并行程序集的 Visual C++ 库”。
引起C运行时错误R6034的原因和解决方法
MSDN提示修改此问题的方法是:
使用清单重新生成应用程序。使用 Visual Studio 生成应用程序会自动将清单放入生成的 EXE 或 DLL 文件中。如果要在命令行生成应用程序,请使用 mt.exe 工具将清单作为资源添加。如果要生成 EXE,请使用资源 ID 1;如果要生成 DLL,则使用 2。有关更多信息,请参见如何:将清单嵌入到 C/C++ 应用程序。
根据对应文章按如下方法修改,成功解决此问题(我的修改主要是第二步将Manifest内嵌到exe成功):
1. 在项目的“属性页”对话中,可以控制生成特定项目的清单文件。在“配置属性”选项卡上,单击“链接器”(Linker),再单击“清单文件”(Manifest File),然后单击“生成清单”(Generate Manifest)。默认情况下,新项目的项目属性会设置为生成清单文件。但是,通过使用项目的“生成清单”属性,也可以禁用项目清单的生成。当将此属性设置为“是”时,将生成该项目的清单。否则,当链接器解析应用程序代码间的依赖关系时,将忽略程序集信息,且不会生成清单。
2. Visual Studio 中的生成系统允许将清单嵌入最终的二进制应用程序文件中,或生成为外部文件。此行为由“项目属性”对话中的“嵌入清单”选项控制。若要对此属性进行设置,请打开“清单工具”节点,然后选择“输入和输出”。如果不嵌入清单,则它将被生成为外部文件,并保存在最终的二进制文件所在的目录中。如果嵌入清单,则 Visual Studio 将使用以下过程嵌入最终清单:
(1)将源代码编译为对象文件后,链接器将收集依赖程序集信息。在链接最终二进制文件时,链接器会生成一个中间清单,稍后该清单将用于生成最终清单。
(2)生成中间清单并完成链接后,将执行清单工具以合并成一个最终清单,并将它另存为外部文件。
(3)然后,项目生成系统将进行检测,确定在由清单工具生成的清单中,其信息是否有别于已嵌入二进制文件中的清单所包含的信息。
(4)如果二进制文件中嵌入的清单不同于清单工具生成的清单,或二进制文件中不包含嵌入的清单,则 Visual Studio 将再次调用链接器,将外部清单文件作为资源嵌入到二进制文件中。
(5)如果二进制文件中嵌入的清单与清单工具生成的清单相同,则生成系统将继续下面的生成步骤。
清单会作为文本资源嵌入到最终二进制文件中,您可通过在 Visual Studio 中将最终二进制文件作为文件打开来查看该清单。
VS2008的程序,运行时遇到R6034错误:
最新推荐文章于 2024-02-28 15:40:55 发布