c# 无法加载oraops.dll_Visual C++程序拷贝到别人机器上无法运行怎么办

a5c9d499e740ba05f92debf91ec6dbf9.gif

点击上方蓝字关注我!

最近指导本科生实习时遇到一个问题:他写的程序在自己的机器上可以正常运行,但是拷贝到同学的机器上会报告加载失败,如下图所示。

1d8c24785263c5698c307308f4bb8c79.png 

图1 程序加载失败

象这种问题,基本上都是由于程序依赖某个DLL,而在出错的电脑上没有这个DLL。怎么知道是哪个DLL不存在呢?如果百度一下,很多人会提到Dependency Walker这个工具。Dependency Walker是一个非常好用工具,它可以分析一个EXE或DLL文件都依赖哪些DLL。Dependency Walker曾经是早期Visual Studio标配的工具,不过后来被从VS中删除了。他的作者专门建了一个网站(http://www.dependencywalker.com/)来提供免费的版本供大家下载。不过我不推荐大家去下载这个工具,因为它古老了,2006年以后就没有更新过,在我的Win10系统中一打开EXE就会死机。我推荐大家使用另一个工具Dependencies(https://github.com/lucasg/Dependencies)。这个开源软件是另外一个作者用C#语言重新写的,并做了一些功能上的增强。

下载Dependencies之后,运行DependenciesGUI.exe,然后就可以打开EXE或DLL文件进行分析了。在图2中,我们可以看到,它会列出我们的程序都依赖哪些DLL,包括系统提供的(如user32、gdi32),也包括Visual C++自身需要的DLL(图中的最后两个)。

82ec593b7cfd8674fad98890687932b5.png

图2 使用Dependencies进行分析

之所以在其他同学的机器上无法加载,问题就出现在最后的两个DLL上。这两个DLL的文件名(不包括扩展名)都是以字母d结尾的。这说明这两个DLL都是Debug版本的。Visual C++将编译生成的程序分为Release和Debug版本,前者是最终发布给用户的版本,而后者是开发人员进行调试的版本。两个版本依赖的DLL也不同,比如Release版本依赖VCRUNTIME140.DLL,而Debug版本依赖VCRUNTIME140D.DLL。Windows会带有最新的VC++运行版本库,所以如果生成Release版本,通常直接将EXE文件拷贝到其他人的机器上就可以运行(如果其他用户的操作系统太老,可能还是需要拷贝运行库的)。而Debug版本的运行库只有安装了VS的用户机器上才会有,所以如果拷贝Debug版本EXE文件到其他人的机器上就可能无法运行了。

要把Debug模式切换到Release模式很简单只要在图3所标出的地方选择Release即可。这样再编译出来的程序就很容易分发到其他电脑上了。

92182d13e2265fa74f90c8ab6cde0fbe.png

图3 在配置管理器部分改变编译配置

这个问题看似是一个小问题,但是基本上每个VC++的程序员都会至少犯一次。 公众号近期内容回顾

111e01b05e2c85fd42fc8d83c832412a.gif学术交流开放日:WebRTC简介

111e01b05e2c85fd42fc8d83c832412a.gif闲谈清华自动化系C++大作业“雷课堂”

111e01b05e2c85fd42fc8d83c832412a.gif实习招聘:表情管理软件开发

111e01b05e2c85fd42fc8d83c832412a.gif使用Excel分析乐学/Moodle平台的日志

111e01b05e2c85fd42fc8d83c832412a.gif大作业《智能梳妆台》精选:男生版

111e01b05e2c85fd42fc8d83c832412a.gif大作业《智能梳妆台》精选:男生版

111e01b05e2c85fd42fc8d83c832412a.gif熊康华:《代码整洁之道》读后感

111e01b05e2c85fd42fc8d83c832412a.gif王宇航:《代码简洁之道》读后感

111e01b05e2c85fd42fc8d83c832412a.gif刘美辰之《Clean Code》读后感

111e01b05e2c85fd42fc8d83c832412a.gif窦博文:《代码整洁之道》读书感言

111e01b05e2c85fd42fc8d83c832412a.gif张亚磊同学《代码整洁之道》的阅读笔记

111e01b05e2c85fd42fc8d83c832412a.gif管宇同同学分享《代码整洁之道》读书心得

111e01b05e2c85fd42fc8d83c832412a.gif病毒不能阻止我学习 | 居家下载论文指南

111e01b05e2c85fd42fc8d83c832412a.gif盘点2019,过得很充实


bca1ea51b2954d4c244ad7685309a566.png微信号: bitpmcrg 欢迎关注北京理工大学专业移动通信组的公共号“北理工通信课题组” 9aa6c0b0157cf24c2e83598834048170.png 0d4487f58b14308366fc73b34829962d.png

点击在看,为作者点赞 0f50a95719a41d147ff831d96b9e7e10.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值