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

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

  1. 项目菜单->项目属性->配置属性->常规->平台工具集,选择“VS2013WindowsXP(v120_xp)”;(本人在实际测试中只改了这一项就可以在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文件就是静态编译了。

【Visual Studio】让用VS2012/VS2013编写的程序在XP中顺利运行(转)的更多相关文章

  1. 让用VS2012/VS2013编写的程序在XP中顺利运行

    转自:http://blog.csdn.net/asanscape/article/details/38752655/ 微软为了推销自家平台,默认配置下VS2012和VS2013编写的应用程序只能在V ...

  2. 让用VS2013编写的程序在XP中顺利运行

    vs2013编译好的exe文件拖到虚拟机xp中无法运行,提示错误,从网上搜索.找答案. 参考:http://blog.csdn.net/asanscape/article/details/387526 ...

  3. 让用VS2012/VS2013编写的程序在XP中顺利执行

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

  4. 【转】怎么让VS2015编写的程序在XP中顺利运行

    1. 概述 默认配置下VS2015编写的应用程序只能在Win8/Win10上运行.但幸好还保留了生成XP程序的设置项.XP和Win2003的用户还是大量存在的,我们程序软件的发布不能不考虑他们.另外X ...

  5. 如何让VS2013编写的程序在xp下运行

    总体分c++程序和c#程序 1.c++程序 这个用C++编写的程序可以经过设置后在XP下运行,主要的“平台工具集”里修改就可以. 额外说明:(1)程序必须为Dotnet 4.0及以下版本.(XP只支持 ...

  6. 如何让VS2012编写的程序在XP下运行

    Win32主程序需要以下设置 第一步:在工程属性General设置 第二步:在C/C++ Code Generation 设置 第三步:SubSystem 和  Minimum Required Ve ...

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

    原文地址:http://www.vcerror.com/?p=1483 问题描述: 用VC2013编译了一个程序,在Windows 8.Windows 7(64位.32位)下都能正常运行.但在Win ...

  8. visual studio 2013常用快捷键 VS2013快捷键大全

    visual studio 2013常用快捷键 VS2013快捷键大全   Visual Studio 2013 是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具 ...

  9. Visual Studio 2013 如何在停止调试Web程序后阻止IIS Express关闭

    vs2013 调试项目的时候,当停止调试的时候,端口就被断了.之前以为是IIS那边的控制问题,但是其他并行的项目运行都没有出现这种情况. 最初也没在意,直到现在实在忍受不了了,每次重开也太烦了.就去各 ...

随机推荐

  1. C++ 学习笔记 开篇

    从大一开始学习C语言,大学期间做了许多嵌入式的开发项目,毕业后从事嵌入式开发工作主要的开发语言也是C语言.虽然期间断断续续的学习过C++,做过QT.C#上位机但也只是在其他语言的外壳下使用C在开发,始 ...

  2. centos安装并配置MySQL

    一.卸载掉原有mysql [root@xiaoluo ~]# rpm -qa | grep mysql // 这个命令就会查看该操作系统上是否已经安装了mysql数据库 [root@xiaoluo ~ ...

  3. 【netbeans】netbeans utf-8编码

    首先,在你的netbeans的安装文件夹里面找到etc这个文件夹,打开,在里面找到netbeans.conf这个文件,打开,找到这一句netbeans_default_options="-J ...

  4. Yii2 基于rbac访问控制

    Yii2 是一款非常强大的PHP底层框架, 牛b的人都喜欢用它, 有时候你们可能会发现, Yii2 底层处理不是很好, 比如: 每次分页, yii底层都会多统计一次数据的总条数!  那只能说你对它还不 ...

  5. java web项目(spring项目)中集成webservice ,实现对外开放接口

    什么是WebService?webService小示例 点此了解 下面进入正题: Javaweb项目(spring项目)中集成webservice ,实现对外开放接口步骤: 准备: 采用与spring ...

  6. Python学习笔记:字符串

    字符串 字符串定义:字符串可以使用一对单引号.双引号或三引号来定义,即便是单个字符也会当做字符串来处理(Python中没有字符类型,单个字符也就是只有一个字符的字符串而已). 原始字符串:字符串中反斜 ...

  7. python中字符串的一些用法

    一.字符串的拼接:      a=‘123’      b=‘abc’       d=‘hello world’ 1.print(a+b) 2.print(a,b) 3. c=‘ ’.join((a ...

  8. IAR单片机启动文件与程序入口

    最近在做TI单片机TM4C123GE6PZ的BootLoader,需要对启动文件做出修改,折腾了半宿,弄得事实而非. IAR默认提供了单片机的启动文件,cstart.s或者其他cstartxxx.s, ...

  9. POJ:2586-Y2K Accounting Bug

    Y2K Accounting Bug Time Limit: 1000MS Memory Limit: 65536K Description Accounting for Computer Machi ...

  10. ubuntu 设置Path 开机启动脚本

    vim /etc/rc.local export PATH=$PATH:/work/apps/node-v0.12.7-linux-x64/bin:/work/apps/ledisdb/binexpo ...