R6030 CRT 未初始化

Posted

技术标签:

【中文标题】R6030 CRT 未初始化【英文标题】:R6030 CRT Not initialized 【发布时间】:2014-06-13 17:32:42 【问题描述】:

我们在客户现场遇到问题;客户使用日期为 2011 年 2 月 19 日的 VS2010 运行时和版本 10.0.40219.1 构建了他的应用程序 客户的应用程序使用我们的 dll,它也是使用 VS2010 Runtime 构建的,但版本稍旧。

我们在安装程序中有一个选项,您可以在其中跳过安装 VC Runtime 可再发行组件,这里客户会跳过,因为他已经安装了运行时。

这里的问题是,如果客户的应用程序先启动然后加载我们的 DLL,那么就没有问题。但在另一种情况下,如果客户的 App 只加载 msvcr100.dll 而没有加载 msvcp100.dll 然后当我们的dll被加载时,我们得到一个错误“R6030 CRT Not initialized”

这是因为运行时不兼容的问题,运行时和应用程序是否应该使用完全相同的版本进行编译?

【问题讨论】:

这个问题已经解决了,当这个问题发生时,我做的是创建一个内存转储,在分析这个转储时,我们发现其中一个应用程序 dll 在其 DllMain 中执行 LoadLibrary。当这个问题得到解决后,问题就解决了,所以底线是永远不要在 Dllmain 中调用 LoadLibrary 【参考方案1】:

是的!我建议您的程序始终与您构建时使用的 CRT 一起交付。

但我想知道这一点。在内部,较新的 DLL 与以前的版本二进制兼容。因此,因为您使用旧版本构建,所以新版本“不应该”破坏您的应用程序。

在为 VC 运行时使用本地安装时,我总是避免这个问题。

【讨论】:

当您说本地安装 VC 运行时,您是否建议我们将类似于 Microsoft.VC100.CRT、ATL、MFC 等文件夹的文件夹复制到我们的 DLL 位于客户的同一文件夹中放置并注意:我的是一个 dll,所以它会首先引用这个当前目​​录,它如何知道它需要查看 Microsoft.VC100.CRT 等文件夹 这仅适用于进程级别。该进程控制 DLL 的搜索路径。 任何人都可以提出解决方案,即使在使用客户使用的相同版本重建dll后,此问题仍未解决,MSVCR100.dll在什么情况下不加载MSVCP100.dll 用户依赖和协议加载顺序。您的 DLL 是隐式加载的还是显式加载的? 我的 DLL 是显式加载的,这在 VS2010 上编译 DLL 的新版本之前工作正常【参考方案2】:

我不知道确切的原因,但我发现 R6030 运行时错误可以通过在某些计算机上将 Microsoft IME 2010 更改为 Microsoft 标准 IME 来解决。可能与Microsoft office 2010有关。另外,请在windows - start - msconfig - service 选项卡中取消选中“image protection service”。

请参阅以下屏幕截图。很抱歉截图中的语言是韩语。

Microsoft IME change

Image Protect Service

【讨论】:

以上是关于R6030 CRT 未初始化的主要内容,如果未能解决你的问题,请参考以下文章

电脑crt显示未初始化怎么解决

编译链接实战(12)crt1.o, crti.o, crtbegin.o, crtend.o, crtn.o是什么东西

9)C语言之数组的定义与访问

飞塔防火墙快速初始化管理员密码

解决方法解决锐捷EVE模拟器无法弹出选择CRT接管命令行和命令行

vc编译时出现 LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main