新来的同事电脑出现一个奇怪的问题,vs中写了一个HelloWorld程序,编译运行后报错如下

表现上是win32配置编译后运行,报如上错误,win64的配置编译后运行正常
一开始怀疑是他的VS环境有问题,不过exe放在外边运行也是一样的错误,所以排除。
后来也在网上查了一些资料,基本锁定了是exe需要的CRT库版本没有匹配上。
小工具dependency的截图如下,明明是32位的exe现有依赖的却是64位的C运行库。

于是乎,我开始怀疑他64位的系统里,system32目录下的dll版本是错的,但是用dependency检查了发现没毛病,确实是32位的。省略中间的来回排查和纠结。。。
后来,我回到我的电脑,检查了我系统里的system32目录,发现我的syswow64目录里的msvcp100d.dll和msvcr100d.dll全是32位的,此时,我有点怀疑人生。。不,怀疑直觉。。于是手动百度了windows64和32位的dll使用方案,于是看到了下边这位的答案,简直就是我的问题的翻版。
https://www.cnblogs.com/hbccdf/p/dllchecktoolandsyswow64.html
感谢上边这位仁兄,他的回答让我茅塞顿开,这么多年都没发现system32和syswow64的奥秘,

在VS2010中,一个32位的Win32程序在运行时遇到了0xc000007b错误。经过排查,发现是由于32位程序加载了64位版本的CRT库导致。通过dependency工具检查,确认了问题所在。解决方案是将32位的msvcp100d.dll和msvcr100d.dll放入SysWOW64目录,遵循64位Windows系统中32位程序与System32和SysWOW64目录的关系。此外,建议直接从VS安装目录复制正确的CRT库覆盖系统文件,以确保正确运行。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



