win7 x64 msvcp80.dll/msvcr80.dll 的问题

u_lever_2 2012-08-23 09:34:51
我在win xp下vc++ 2005编的程序,用到了MFC;现在换了个电脑,装了win7 x64系统,vc++ 2010,目前能够正常编译,但是一debug运行就提示“无法启动此程序,因为计算机中丢失MSVCP80.dll ......”(和“无法启动此程序,因为计算机中丢失MSVCR80.dll ......”)

运行原先在win xp/vc++2005下编译出的release版,无法显示程序的GUI界面,同样报错“……丢失MSVCP80.dll……”(和“……MSVCR80.dll”)

我从网上下载了MSVCP80.dll和MSVCR80.dll,分别放到c:\windows\system32\ 和 c:\windows\syswow64 下, 再运行vc++2010里编译的debug程序,以及xp+2005下编译的release版,同样都报错。但是错误不再是“丢失MSVCP80.dll”,报错变成了“……应用程序无法正常启动0xc000007b……”

visual studio redistributeble 2005(x86)和(x64)都装了,并且也都卸载重装试过了,现象依旧。
又在win7 x64下装了一个vs2005,也还是依旧报错。

请教大虾应该怎么办? 我都抓狂了……
...全文
8143 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
u_lever_2 2012-08-25
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 的回复:]
and manifest hell now
[/Quote]

感谢!实在没办法了,把系统重装了一下,全好了……程序没做任何改动。
u_lever_2 2012-08-25
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 的回复:]

and manifest hell now
[/Quote]

感谢! 实在没办法了,把系统重装了一下,全好了……程序没做任何改动。

不知道是装软件什么影响了系统,幸亏备了ghost
u_lever_2 2012-08-25
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 的回复:]

This DO is DLL Hell!
[/Quote]
感谢,实在没办法了。把系统重装了一下,全好了……程序没做任何改动。
yisikaipu 2012-08-25
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 的回复:]

引用 32 楼 的回复:

This DO is DLL Hell!

感谢,实在没办法了。把系统重装了一下,全好了……程序没做任何改动。
[/Quote]

这么看来,应该是由于你往系统目录里拷贝了.dll引起的的混乱,重装后这些.dll都被清理了
yisikaipu 2012-08-24
  • 打赏
  • 举报
回复
我前面所述,都是为了解决有vs的机子上编译出的东西,放到没有vs或者更低版本的vs机器上运行的。你现在的问题似乎不适用
yisikaipu 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 的回复:]权限解决了,文件也复制进去了,未果……还是报错……[/Quote]

不要往这里拷贝东西

先问一下,你是2005往2010上移植,在2010上编译出来的,怎么会需要MSVCP80.dll?肯定不是你的.exe直接依赖的吧。用depends查看一下是谁依赖它。
u_lever_2 2012-08-24
  • 打赏
  • 举报
回复
权限解决了,文件也复制进去了,未果……还是报错……
u_lever_2 2012-08-24
  • 打赏
  • 举报
回复
我看到win7下的winsxs路径下其实有...CRT...,其中有msvcp80.dll,但是版本号与exe需要的不一致。我想把xp下的那些考进去,但是winsxs这个文件夹没办法更改权限,凡是涉及编辑,更改的按钮前面都有一个盾牌,蓝黄相间。“允许”复选框那里都是灰的,不可点
win7这个文件夹里不能往里粘贴文件么?
u_lever_2 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]
安装Micorsoft Visual C++ 2008 Redistributable试试?
[/Quote]
这个装了 x86和x64都有
yisikaipu 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]用depends.exe查看exe依赖的dll[/Quote]

这个恐怕不够。depends只按名字和指定路径查找。楼主现在肯定不是缺失文件,否则会报找不到dll。应该就是dll版本问题。不仅仅涉及到Microsoft.VC*.MFC,往往还与控件版本有关,类似的问题碰到过,比如有次就因为 Microsoft.Windows.Common-Controls 版本不同
赵4老师 2012-08-24
  • 打赏
  • 举报
回复
安装Micorsoft Visual C++ 2008 Redistributable试试?
赵4老师 2012-08-24
  • 打赏
  • 举报
回复
用depends.exe查看exe依赖的dll
u_lever_2 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
你先随便写个简单的32位程序,在两台机子上摸索一下,不要几个不同的问题混在一起
[/Quote]

mfc对话框的hello world没问题,xp-32下建工程,编release;
然后整个工程复制到win7-64下,32位的release版正常运行,源代码工程转换为2010的工程,按64位的编译后也正常运行。

我原本的程序是一个工程里多个项目复合的。我发现控制台程序都正常,一涉及mfc的就不行了,mfc程序里我用到了多线程和数据库接口。
yisikaipu 2012-08-24
  • 打赏
  • 举报
回复
然后,把那些拷贝来的文件都移开
yisikaipu 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]我在win xp下vc++ 2005编的程序,用到了MFC;现在换了个电脑,装了win7 x64系统,vc++ 2010,目前能够正常编译,但是一debug运行就提示“无法启动此程序,因为计算机中丢失MSVCP80.dll ......”(和“无法启动此程序,因为计算机中丢失MSVCR80.dll ......”)

运行原先在win xp/vc++2005下编译出的release版,无法显示……[/Quote]

从头来过

这个一般是manifest的问题

先确认一下

2005的项目,在2010下打开,设置里linker->manifest是不是no
u_lever_2 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
你搞颠倒了!
[/Quote]

哦 那这个确实是我搞错了。
但是我试过各种排列组合…… 只放system32,只放syswow64,以及两个都放…… 都不行
况且 直接和exe放到同一个文件夹下都不行
赵4老师 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 4 楼 的回复:

请注意!在64位Windows下:
c:\windows\system32\目录中存放64位DLL
c:\windows\syswow64\目录中存放32位DLL


??真的? system32下放64位的dll? 难道不是和名字一致啊???

我是把32位的dll放到system32下,64位的dll放到syswow64下,不行。
[/Quote]
你搞颠倒了!
u_lever_2 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
两种办法:
1,把.exe里的version全部改成.manifest里的,当然不仅仅是version,还有其它编号
2,前面说的办法。把.exe里所需的版本找来
[/Quote]
C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT\Microsoft.VC80.CRT.manifest
Microsoft.VC80.CRT" version="8.0.50727.762
exe里面
name="Microsoft.VC80.CRT" version="8.0.50727.762"

我在winsxs下找到x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700\
这个文件夹,把里面的dll都复制到win7电脑上32位release文件夹下,运行,依然报错,还是,“……应用程序无法正常启动0xc000007b……”

是不是除了p80.dll和r80.dll外还有别的问题?
yisikaipu 2012-08-24
  • 打赏
  • 举报
回复
你先随便写个简单的32位程序,在两台机子上摸索一下,不要几个不同的问题混在一起
u_lever_2 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

到C:\Windows\winsxs下面搜搜看
[/Quote]

我在xp下vc2005里debug,看到了dll的细节版本号,然后也在winsxs下找到了,好像分为debug和非debug两种。我把非debug的考到win7电脑上,放在我的程序的32位release版路径下,运行依然报错,“……应用程序无法正常启动0xc000007b……”
加载更多回复(17)

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧