微软为了推销自家平台,默认配置下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过程。后面的參数也非常easy理解。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文件就是静态编译了。

让用VS2012/VS2013编写的程序在XP中顺利执行的更多相关文章

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

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

  2. 【Visual Studio】让用VS2012/VS2013编写的程序在XP中顺利运行(转)

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

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

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

  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. 大话Spark(3)-一图深入理解WordCount程序在Spark中的执行过程

    本文以WordCount为例, 画图说明spark程序的执行过程 WordCount就是统计一段数据中每个单词出现的次数, 例如hello spark hello you 这段文本中hello出现2次 ...

  9. 如何让VS2013编写的程序

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

随机推荐

  1. 【bzoj3444】最后的晚餐 并查集

    题目描述 n个人排成一排,有m个条件,第i个条件要求ai和bi相邻,求方案数. 输入 输入有m+1行,第一行有两个用空格隔开的正整数n.m,如题所示.接下来的m行,每一行有两个用空格隔开的正整数,第i ...

  2. 【bzoj1927】[Sdoi2010]星际竞速 有上下界费用流

    原文地址:http://www.cnblogs.com/GXZlegend/p/6832464.html 题目描述 10年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一,夺得这个项目的冠军 ...

  3. 第二届360杯全国大学生信息安全技术大赛部分解题思路(WEB安全)

    第一题如下: 用burpsuit设置好代理后,点击发送验证码,可以看到如下: 然后go之后可以看到如下的验证码: 提交验证码后即可获得key 第二题如下: 通过/data/mysql_error_tr ...

  4. angularjs的service

    1.首先我们创建一个模块 var module = angular.module( "my.new.module", [] ); 2.然后写具体的service 可以看到它是一个很 ...

  5. 强引用(StrongReference)、弱引用(WeakReference)、软引用(SoftReference)、虚引用(PhantomReference)

    1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object(); // 强引用 当内存空间 ...

  6. Linux Mint---shutter截图软件

    shutter 可以说是linux下最好的截图软件了,默认安装好后不能编辑截图,解决方法如下: 1-关闭shutter 2-sudo apt-get install shutter libgoo-ca ...

  7. C++ 采集音频流(PCM裸流)实现录音功能

    与上一篇的“C++ 播放音频流(PCM裸流)” 点击打开链接 相对应,本篇是关于用C++实现录音功能的.同样是直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用,也可以下载本人上传的相关 ...

  8. python update数据

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/23 23:57 # @Author : lijunjiang # @Fi ...

  9. XML技术总结之XDocument 和XmlDocument

    引言 虽然现在Json在我们的数据交换中越来越成熟,但XML格式的数据还有很重要的地位. C#中对XML的处理也不断优化,那么我们如何选择XML的这几款处理类 XmlReader,XDocument ...

  10. Selenium2+python自动化19-单选框和复选框(radiobox、checkbox)【转载】

    本篇主要介绍单选框和复选框的操作 一.认识单选框和复选框 1.先认清楚单选框和复选框长什么样 2.各位小伙伴看清楚哦,上面的单选框是圆的:下图复选框是方的,这个是业界的标准,要是开发小伙伴把图标弄错了 ...