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 未初始化的主要内容,如果未能解决你的问题,请参考以下文章
编译链接实战(12)crt1.o, crti.o, crtbegin.o, crtend.o, crtn.o是什么东西
解决方法解决锐捷EVE模拟器无法弹出选择CRT接管命令行和命令行
vc编译时出现 LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main