VC++开发的程序在部署时无法运行的问题

有时候,用VC++开发的程序在自己的系统上运行得好好的,但是一旦放到别的WIN系统上运行就失败,一般提示无法加载某个DLL或缺少什么运行时库。这个问题很多Windows的程序员都遇到过,我把常见的几个原因总结出来,希望对各位读者在解决类似问题时有用。

1. 程序依赖了某些动态库,而这些DLL不一定在其他系统中已安装,这是最常见的一个原因。如果你的程序是用MFC开发的,要特别注意一个工程设置的问题:编译生成可执行文件尽量用“在静态库中使用MFC库”,如果非得需要使用“在共享DLL中使用MFC”方式,则需要将程序依赖的DLL放到程序的目录中,或者在用户系统环境里安装一个对应你用的VC版本的运行时库。

2. 确定你依赖的DLL有没有用到一些函数在旧的系统中没有的接口。虽然VC对Windows各个版本的兼容性是很好的,但是现在VC有很多版本,从VC6.0,VC2003到VC2017,每个版本编译出来的二进制文件所依赖的DLL可能是不一样的,如果它依赖的DLL在别的系统中没有或者用到别的系统中没有导出的函数,则运行到其他系统就会出问题。要检查你的程序缺少了哪些运行时需要的DLL,可以使用工具Dependency Walker查看。

3. 编译程序时如果不需要调试信息,尽量将“生成调试信息”改成“否”,否则将程序移植到非开发环境的系统上很有可能因为有些DLL加载不到而失败,这个问题常见于用VC高版本(大于VC2008)编译的程序中。

4. 确定你的程序是否还需要支持XP系统,如果用到了VC2008以上编译的,需要加入一些宏以使程序兼容旧的平台:

#define WINVER          _WIN32_WINNT_WINXP
#define _WIN32_WINNT    _WIN32_WINNT_WINXP

5. 尽量覆盖不同版本的系统,特别是要32位系统和64位系统上都跑一下。如果开发员开发所用的环境是32位系统,没有在64位系统上测试过,则放到64位系统上运行很有可能出问题。如果你的程序是编译成64位的,那就不需要考虑这个问题,只支持64位的系统就行了;如果你的程序是32位的,理论上可以在32位和64位的Windows系统中跑,这种情况下,程序员在做系统兼容性测试时,一定要至少覆盖到两种不同位数的系统。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值