转自:http://blog.csdn.net/asanscape/article/details/38752655/

微软为了推销自家平台,默认配置下VS2012和VS2013编写的应用程序只能在Vista/Win7/Win8上运行。但幸好还保留了生成XP程序的设置项。XP和Win2003的用户还是大量存在的,我们程序软件的发布不能不考虑他们。

  1. 项目菜单->项目属性->配置属性->常规->平台工具集,选择“VS2013WindowsXP(v120_xp)”;

  2. 项目菜单->项目属性->配置属性->常规->MFC的使用,选择在静态库中使用MFC;

  3. 项目菜单->项目属性->链接器->系统->子系统->控制台或窗口windows(根据你的项目类型选择),第二项版本号设成5.01。

  4. C/C++->代码生成->运行库,选择“多线程调试(/MTd)";

  5. 还需要至少带有Update3(或4),这一点我没有验证,因为我直接安装的就是带有Update3的VS2013。

  以上就OK了。缺点仍然有,例如静态编译的EXE比正常动态要大不少,目前我尚未试出动态编译后在XP中能运行的方法,--不过这个不要紧,因为VS2013版本如此之高,客户的电脑上很难自带配有它的运行库,你即使动态编译,发布软件时也还是要带上运行库的,只不过在多个程序时只需带一份运行库罢了。

  另外,我在实际大项目中用上述方法,仍有出错现象发生。以后再研究吧。一般情况下上述方法就可以了。

  在网上另外发现了这个贴子,说得很详细,包括非IDE的命令行编译,一起贴到下面:

  问题一:编译出来的exe在xp上面运行提示“不是有效的win32应用程序”
 
  在vs2012/2013版本里面,其自带的c编译器cl.exe,若直接使用cl a.c编译,那么生成出来的exe放在vista及以上版本直接运行没有问题,但是在xp上则会出来“不是有效的win32应用程序”的出错提示。这是因为vs2012/2013自带的c编译器默认情况下生成的exe会默认只支持vista及以上版本的windows系统。
 
  解决方法:
 
  对于使用命令行cl.exe直接编译的方式:
先用cl a.c编译一遍,此时会生成a.exe和a.obj两个文件,此时,再执行 link b.obj /subsystem:console,5.01,它会链接一个新的a.exe出来,此时的exe就可以在xp上运行了。相比vs2010以及以前版本的编译器编译,会多第二步的link过程,后面的参数也很容易理解,subsystem,5.01,此处的5.01是指的windows内核版本号,5.01表示windows 2000 with sp1,即此exe可以在win2000 sp1及以上的windows中执行。
 
  当然,这个地方的/subsystem后面有很多参数,上面给的console,5.01是指命令行程序,如果是有GUI即有窗口的程序,改成windows,5.01即可。!!注意!!此处的5.01一定不要想当然改成5.0就变成windows 2000 不带sp1的版本,实际上,5.0并不被vs2013的编译所承认,会报警告不认5.0,就会按照默认的不带5.01的方式编译,这样就无法在vista以下的系统中运行生成的exe了。
 
  对于在vs2013里面使用新建项目的方式:
右击相应的项目,选择“属性”,在项目属性页中的“配置属性”下面的“常规”里面,把“平台工具集”,由“Visual Studio 2013 (v120)”改成“Visual Studio 2013 - Windows XP (v120_xp)”,确定之后,重新生成项目即可。当然这里按这样修改的话,就只能在winxp及以上的版本系统里面运行了。

  问题二:用vs2010/2012/2013编译出来的exe在未安装vc++运行库的机器上运行时提示”未找到MSVCR120D.DLL“从而无法运行
 
  这是个老问题了,无非就是运行库动态编译和静态编译的问题了。dll动态加载的话有个好处,它可以减少生成的exe文件的体积,但是缺点就是如果对应的系统环境变量或者exe所在的目录里面找不到其所需要的dll文件的话,程序就会拒绝执行。而静态编译就是把所有需要的库都静态编译到exe文件里面,这样就可以在所有的系统平台上都能运行,但它也有一个缺点,就是生成的exe文件因为已经带了部分库的代码,所以体积会相对动态编译出来的exe大(具体大多少要根据库的内容才能确定)。
 
  解决方法:
 
  对于直接使用cl.exe和link.exe编译连接的方式:
直接在cl.exe编译的时候或者在makefile里面把编译参数加上/MT即可。

  对于在vs2013里面使用新建项目的方式:
右击相应的项目,选择“属性”,在项目属性页中的“配置属性”下面的“C/C++”下面的“代码生成”一项,由默认的“多线程调试DLL (/MDd)”,改成“多线程 (/MT)”,确定之后,重新生成项目即可。这样所得的exe文件就是静态编译了。

转载于:https://www.cnblogs.com/x_wukong/p/5478440.html

让用VS2012/VS2013编写的程序在XP中顺利运行相关推荐

  1. 用VS2012或VS2013在win7下编写的程序在XP下运行就出现“不是有效的win32应用程序

    问题描述: 用VC2013编译了一个程序,在Windows 8.Windows 7(64位.32位)下都能正常运行.但在Win XP,Win2003下运行时,却报错不能运行,具体错误信息为" ...

  2. 利用VS2013编写C++程序

    利用VS2013编写C++程序 1.下载好VS2013程序 这里请读者自行百度. 2.打开VS2013->左上角文件->新建->项目,然后弹出窗口如下所示 3.模板->Visu ...

  3. 接收输入的一行字符,统计出字符串包含数字的个数 2、编写一个程序,计算字符串中子串出现的次数 3、请输入星期几的第1个字母,用来判断是星期几,如果第1个字母一样,则继续判断第2个字母,依次类推。

    1.接收输入的一行字符,统计出字符串包含数字的个数 list_1 = input('请输入一行字符串:') count = 0 for i in list_1:if '0' <= i <= ...

  4. win10系统下vs2015编写的C++程序在XP系统里运行

    虽然目前很多用户的电脑系统都是win7到win10,但还有部分用户的电脑系统是xp,比如一个项目要兼顾到xp用户,而通常编写的vs2015程序在xp里并不能运行,先做一个如下测试,使用vs2015创建 ...

  5. c语言编写天气预报程序,在Deno中构建一个命令行天气预报程序

    在本文中,我将通过安装Deno运行时,并创建一个命令行天气程序,该程序将把一个城市名称作为参数,并返回未来24小时的天气预报. 要为Deno编写代码,我强烈建议将Visual Studio Code与 ...

  6. 用java编写spark程序,简单示例及运行

     最近因为工作需要,研究了下spark,因为scala还不熟,所以先学习了java的spark程序写法,下面是我的简单测试程序的代码,大部分函数的用法已在注释里面注明. 我的环境:hadoop 2 ...

  7. vs2015+Qt5.7编译生成的程序在xp中运行提示不是有效的win32程序解决方案

    //用Qt mingw版本的编译的程序是可以运行的.但由于Qt5.6以上好像就没有QtWebkit了,而被替代的是QtWebEngineView.而带有QtWebEngineView的版本的都是msv ...

  8. 6-6 调查 :在6.3.1节编写的程序favorite_languages.py中执行以下操作

    创建一个应该会接受调查的人员名单,其中有些人已包含在字典中,而其他人未包含在字典中. 遍历这个人员名单,对于已参与调查的人,打印一条消息表示感谢.对于还未参与调查的人,打印一条消息邀请他参与调查. ​ ...

  9. 让ASP程序在服务器中自动运行

    有时候希望ASP网站中的某个页面能够定时执行,可以通过Windows的计划任务来实现: 一.生成计划任务能够执行的vbs代码,例子如下: Dim IE  Set IE = CreateObject(& ...

最新文章

  1. GIL(全局解释器锁)与互斥锁
  2. 机器学习小技巧:模型训练完成后发送邮件
  3. leader选举的源码分析-runFromConfig
  4. 我是如何学习写一个操作系统(六):进程的调度
  5. 服务器不显示内存条,服务器检测不到内存条
  6. 这次是真香了!iPhone 11一个月卖出1200万部 苹果加大产量
  7. virtualbox 装win95 win98
  8. 细说php在哪买,细说PHP
  9. Java正则表达式【详解】
  10. 计算长方体和四棱锥的表面积和体积(类的继承)python java
  11. 开启双重验证后无法登录Outlook桌面版的解决方法
  12. Windows 7 插件KB4474419安装 Symantec Endpoint Protection 只能安装在具有SHA-2代码签名支持更新(KB4474419)的系统上
  13. win7未能成功安装驱动服务器,ghost win7未能成功安装设备驱动程序怎么办解决方法...
  14. HTML5支持rpx,css小程序的元素尺寸单位px,rpx及rem
  15. 打字训练 my father1
  16. python --给图片加文字
  17. Kafka 开启 SASL/PLAINTEXT 认证及 ACL
  18. 身份证号码含义及最后一位校验算法(ISO 7064:1983.MOD 11-2)
  19. 设计一款主动降噪(ANC)耳机
  20. 网络学习(一)--基本模型学习

热门文章

  1. 学习Windows2008——设计活动目录
  2. awt简单应用 panel面板
  3. Struts2学习小结
  4. SSM项目搭建一(终)
  5. VMM2012应用指南之4-向VMM中添加Hyper-V主机与应用服务器
  6. 什麽是世界上最值得珍惜的
  7. php去掉字符串的最后一个字符
  8. 华昊中天获国投创业等机构数亿元投资,专注抗肿瘤小分子化学药物研发...
  9. Attention Model(注意力模型)思想初探
  10. C# 在PDF中绘制动态图章