Microsoft Visual Studio 开发的C++程序软件发布相关事宜
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++程序软件发布相关事宜的更多相关文章
- Windows 7中,用Visual Studio开发WPF应用程序,实现从Windows Explorer中拖拽文件到应用程序,始终显示“无法拖放”符号问题解决方案
Are you running your application or Visual Studio that hosts the app under administrative privilege? ...
- Microsoft Visual Studio 文件识别及其用途简述
Microsoft Visual Studio IDE开发工具集,目前已推出多个不同版本,从之前的VC4.0到现在的VS2015,各个版本都会或多或少的功能或性能上的修改.提升,具体的改进地方可去官网 ...
- C++笔记001:Microsoft Visual Studio 2010软件的安装与建立第一个cpp文件
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 我学习C++使用软件为Microsoft Visual Studio 2010. 首先,软件的安装包 链接:https://pan.bai ...
- 使用Visual Studio开发跨平台的iOS应用程序
[原文发表地址]Developing cross-platform iOS application using Visual Studio [原文发表时间]2015/6/4 C ++是一种流行的高级编 ...
- visual studio 开发linux程序
VisualGDB支持Linux的原理是,通过ssh连接到Linux系统上通过ssh给linux下达命令 . (类似visualgdb的有windgb ,这2个都是商业软件.) Visual GDB ...
- Microsoft Visual Studio 2013 Update 2 离线安装程序
☆ 微软官网地址:☆ http://www.microsoft.com/zh-cn/download/details.aspx?id=42665☆ 离线安装程序 直接下载链接:☆ Microsoft ...
- win8 64位操作系统 Microsoft Visual Studio 2010在IIS上调试 “此任务要求应用程序具有提升的权限”等问题
很少在IIS上调试程序,因系统原因,所以不得不在IIS上预览项目和调试项目(因为只能在IIS上预览项目才能看到项目里的数据). 1.附加到进程(注意附加到进程前必须预览项目) 2.选择调试项 需要注意 ...
- Microsoft Visual Studio Ultimate 2013 RC 离线安装程序
Microsoft Visual Studio Ultimate 2013 RC 离线安装程序 ☆ 微软官网地址:☆ http://www.microsoft.com/en-us/download/d ...
- Microsoft Visual Studio 2012 Update 4 RC 3 离线安装程序
Microsoft Visual Studio 2012 Update 4 RC 3 离线安装程序 ☆ 微软官网地址:☆ http://www.microsoft.com/en-us/download ...
随机推荐
- JMeter 集合点
JMeter也有像LR中的集合点,本篇就来介绍下JMeter的集合点如何去实现. JMeter里面的集合点通过添加定时器来完成. 注意:集合点的位置一定要在Sample之前. 集合点:简单来理解一下, ...
- 如何修改SharePoint2013服务器场帐号密码
服务器远程登录帐号密码修改密码后,如何修改sharepoint服务器场管理员账户密码,今天登录了一下N久以前的搭建sharepoint2013服务器场的一台服务器器,登录进去以后直接提示帐号密码过期需 ...
- 【APP设计利器】Sketch 41 Mac中文破解版(含汉化插件)
Sketch是一款拥有美观界面和强大功能适用于所有设计师的专业矢量绘图工具.它旨在为美术设计师创造出一款更优秀的作品,不是复制品,而是提升品.Sketch简约的设计是基于无限的规模和层次的绘图空间,免 ...
- C语言结构体里的成员数组和指针
struct test{ int i; char *p; }; struct test *str; ; char *b = "ioiodddddddddddd"; str = (s ...
- redis-window 集群配置
参考文章: 1.http://www.cnblogs.com/zr520/p/5057141.html (主从配置) 2.http://www.cnblogs.com/lori/p/5825691.h ...
- 使用ASP.NET Web API Help Pages 创建在线接口文档
操作步骤 1.新建Web API项目 2.在项目Areas文件夹下找到以下文件,取消注释图中代码. 3.右键解决方案,属性,如图设置. 4.运行程序,点击右上角API 接口列表: 详情-无参数: 详情 ...
- 5天揭秘js高级技术-第二天
一.数组 1. 什么是数组? 数组就是一组数据的集合: 其表现形式就是内存中的一段连续的内存地址: 数组名称其实就是连续内存地址的首地址: 2. 关于js中的数组定义 数组定义无需指定数据类型: 数组 ...
- js div及table首行顶部吸附示例
js div顶部吸附示例,例如这样: 以下为DIV顶部吸附示例:(此示例来自于网络,在此记录与分享!感谢原作者!) 示例1:兼容IE6 <div style="height:300px ...
- sqlserver事务加锁机制
锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏 ...
- Xms Xmx PermSize MaxPermSize 区别
Eclipse崩溃,错误提示: MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) s ...