VS2005/VS2008软件发布:

  Debug版本:

    非MFC程序:

      编译选项mdd:

        仅依赖C++库和C运行时库,需要到VS2005/VS2008下安装目录VC/redist/Debug_NonRedist中,找到Microsoft.VC90.DebugCRT目录,其中的清单文件*.manifest中内容对应依赖库文件msvcp90d.dll和msvcr90d.dll;前者为C++库,后者为C运行时库;此外还有一个msvcm90d.dll库,项目中一般也会用到;对于清单文件,若VS配置属性中生产exe未嵌入清单文件(工程属性下manifest Tool清单工具中Input and Output输入输出中可配置是否嵌入exe),则运行时需要单独提供以上的清单文件和依赖库库文件,否则只需要提供相应的依赖库文件即可;

        若程序依赖第三方动态库,则还需要提供依赖的第三方库文件。

        此外还需要目标机器有msvcrtd.dll库;

      编译选项mtd:

        不需要依赖C++库和C运行时库,因其已静态连接至exe,也即静态连接libcmtd.lib(位于VC/lib目录下);

        此外若程序依赖第三方库,则还需要提供依赖的第三方库文件(无论动态库或静态库)(一般情况下建议均选择同一种编译选项,不同编译选项可能导致编译冲突)。

    MFC程序:

      动态链接至MFC库时:

        除了需要以上非MFC在不同编译选项外,还需要提供以下对应MFC支持的依赖库文件;

        到VS2005/VS2008下安装目录VC/redist/Debug_NonRedist中,找到Microsoft.VC90.DebugMFC目录,其中的清单文件*.manifest中内容对应依赖库文件mfc90d.dll、mfccm90d.dll以及相应的unicode版本依赖库文件;同样的对于清单文件,若VS配置属性中生产exe未嵌入清单文件,则运行时需要单独提供以上的清单文件和依赖库库文件,否则只需要提供相应的依赖库文件即可;

      静态链接至MFC库时:

        此时不再需要提供以上的清单文件和依赖库;只需要以上非MFC在不同编译选项下情况即可;

  Release版本:

    非MFC程序: 

      编译选项md:

        仅依赖C++库和C运行时库,需要到VS2005/VS2008下安装目录VC/redist/x86或amd64中,找到Microsoft.VC90.CRT目录,其中的清单文件*.manifest中内容对应依赖库文件msvcp90.dll和msvcr90.dll;前者为C++库,后者为C运行时库;此外还有一个msvcm90.dll库,项目中一般也会用到;对于清单文件,若VS配置属性中生产exe未嵌入清单文件,则运行时需要单独提供以上的清单文件和依赖库库文件,否则只需要提供相应的依赖库文件即可;

        若程序依赖第三方动态库,则还需要提供依赖的第三方库文件。

        此外还需要目标机器有msvcrt.dll库;

      编译选项mt:

        不需要依赖C++库和C运行时库,因其已静态连接至exe,也即静态连接libcmt.lib(位于VC/lib目录下);

        此外若程序依赖第三方库,则还需要提供依赖的第三方库文件(无论动态库或静态库)(一般情况下建议均选择同一种编译选项,不同编译选项可能导致编译冲突)。

    MFC程序: 

      动态链接至MFC库时:

        除了需要以上非MFC在不同编译选项外,还需要提供以下对应MFC支持的依赖库文件;

        到VS2005/VS2008下安装目录VC/redist/x86或amd64中,找到Microsoft.VC90.MFC目录,其中的清单文件*.manifest中内容对应依赖库文件mfc90.dll、mfccm90.dll以及相应的unicode版本依赖库文件;同样的对于清单文件,若VS配置属性中生产exe未嵌入清单文件,则运行时需要单独提供以上的清单文件和依赖库库文件,否则只需要提供相应的依赖库文件即可;

      静态链接至MFC库时:

        此时不再需要提供以上的清单文件和依赖库;只需要以上非MFC在不同编译选项下情况即可;

  除了以上的方式外,对于release版本,还可以安装相应版本的vcredist(一套VC++应用程序需要的组件库(事实上保护了release下的需要的各个依赖库而已)),注意vcredist分为32和64位版本,此外还要注意VS2008和VS2008的sp1时的vcredist版本不一样的,应根据应用程序的情况安装对应版本;

  对于某些情况,若在vs2008 sp1下开发时,此时以上的清单文件和依赖库或者是vcredist需要提供对应版本;

  VS2010以及其后的更高级版本,不再提供清单文件,不过若应用程序依赖了vs2005或VS2008开发的库或目标文件(obj),则仍然需要清单文件或内嵌exe的清单文件和对应的VS2005或VS2008的运行时依赖库(含C++/C的运行库,若为MFC库则还需要对应的MFC依赖库);虽然VS2010以及其后的更高级版本开发的库或exe可不再提供清单文件,不过仍然依赖对应的运行时库;

  打包程序时候,无论是debug或者release(一般打包发布为release版本)时,可结合“开发工具”分类文章中提到的dependency walker和sxstrace工具查看程序依赖库或其他依赖的第三方库或者运行异常时的日志信息逐步解决依赖问题或是其他的异常问题;此外也可以采用vs提供的安装和部署工具打包集成net framework运行时库等(可以很好的处理、打包各个依赖库或运行时环境)、还可以采用NSIS或其他第三方打包工具;

  简述:

    若编译选项为mt/mtd则不需要提供C++/C的运行时库依赖;

      若编译连接静态库至MFC;则不需要提供MFC的运行时库依赖;

    以上前提条件是exe以及其依赖的所有的库不依赖任何运行时库的前提下,若有一个依赖,则应用程序将会依赖对应的运行时库;

    为了避免编译冲突,所有开发的库或依赖库应统一使用某一个编译选项CRT运行库依赖;

Microsoft Visual Studio 开发的C++程序软件发布相关事宜的更多相关文章

  1. Windows 7中,用Visual Studio开发WPF应用程序,实现从Windows Explorer中拖拽文件到应用程序,始终显示“无法拖放”符号问题解决方案

    Are you running your application or Visual Studio that hosts the app under administrative privilege? ...

  2. Microsoft Visual Studio 文件识别及其用途简述

    Microsoft Visual Studio IDE开发工具集,目前已推出多个不同版本,从之前的VC4.0到现在的VS2015,各个版本都会或多或少的功能或性能上的修改.提升,具体的改进地方可去官网 ...

  3. C++笔记001:Microsoft Visual Studio 2010软件的安装与建立第一个cpp文件

    原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 我学习C++使用软件为Microsoft Visual Studio 2010. 首先,软件的安装包 链接:https://pan.bai ...

  4. 使用Visual Studio开发跨平台的iOS应用程序

    [原文发表地址]Developing cross-platform iOS application using Visual Studio [原文发表时间]2015/6/4 C ++是一种流行的高级编 ...

  5. visual studio 开发linux程序

    VisualGDB支持Linux的原理是,通过ssh连接到Linux系统上通过ssh给linux下达命令 . (类似visualgdb的有windgb  ,这2个都是商业软件.) Visual GDB ...

  6. Microsoft Visual Studio 2013 Update 2 离线安装程序

    ☆ 微软官网地址:☆ http://www.microsoft.com/zh-cn/download/details.aspx?id=42665☆ 离线安装程序 直接下载链接:☆ Microsoft ...

  7. win8 64位操作系统 Microsoft Visual Studio 2010在IIS上调试 “此任务要求应用程序具有提升的权限”等问题

    很少在IIS上调试程序,因系统原因,所以不得不在IIS上预览项目和调试项目(因为只能在IIS上预览项目才能看到项目里的数据). 1.附加到进程(注意附加到进程前必须预览项目) 2.选择调试项 需要注意 ...

  8. Microsoft Visual Studio Ultimate 2013 RC 离线安装程序

    Microsoft Visual Studio Ultimate 2013 RC 离线安装程序 ☆ 微软官网地址:☆ http://www.microsoft.com/en-us/download/d ...

  9. Microsoft Visual Studio 2012 Update 4 RC 3 离线安装程序

    Microsoft Visual Studio 2012 Update 4 RC 3 离线安装程序 ☆ 微软官网地址:☆ http://www.microsoft.com/en-us/download ...

随机推荐

  1. vue.js开发环境搭建

    1.安装node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html) 2.基于node.js,利用淘宝npm镜像安装相关依赖 在cmd ...

  2. Struts2之开山篇

    ①Struts2是什么? Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图 ...

  3. 严重: Error starting static Resources java.lang.IllegalArgumentException:

    严重: Error starting static Resources java.lang.IllegalArgumentException: Document base E:\myworkspace ...

  4. 如何更改gnome-screenshot的默认的保存路径?

    参考这篇文章: http://www.itye.org/archives/3121 首先, 在dconf-editor中设置, screenshot的自动保存路径: auto-save-directo ...

  5. 1、SQL Server自动化运维 - 备份(一)业务数据库

    为了能够恢复数据,数据库运维基础就是备份,备份自动化也是运维自动化首要进行的. 笔者的备份自动化,通过配置表快速配置为前提,同时记录备份过程,尽可能的减少人工操作.首先将SQL Server备份按用途 ...

  6. Matlab与Windows桌面提醒

    最近在实验室用Matlab做实验,一次训练下来最少得也得5到10分钟吧.在Matlab运行的过程中,又不太好去做别的事情,因为5到10分钟的时间实在有点短.但是,眼睁睁看着代码的运行的话,5分钟又实在 ...

  7. Python-pandas

    Python-pandas Python 中处理时间序列的主要工具是 pandas 库. 1.pannas 基础 1.1使用 DataFrame 类的第一步 #!/etc/bin/python #co ...

  8. css兼容性大坑

    一. \:选择IE6+//区分 IE 8(不实用) .title{ color:yellow\0; color: red\9\0;} \9在 IE 6及其以上都可以识别(但是 IE11不识别 ,IE ...

  9. 多个.ui共用一个.qrc出错

    在一个已经组建完成的qt项目中,如果再加入新的界面文件,界面文件是无法直接使用原工程的.qrc文件的(执行添加资源操作时不显示资源文件),必须重启一次Qt. 版本: Qt 5.7.0 Qt Creat ...

  10. python之路十八

    1.JS 正则    test   - 判断字符串是否符合规定的正则        rep = /\d+/;        rep.test("asdfoiklfasdf89asdfasdf ...