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 ...
随机推荐
- 列表中checked全选按钮的实现
用过音乐播放器的人都知道有个全选按钮,如果使用Jquery实现,有个直接选中checked标签的方式 <!DOCTYPE HTML> <html> <head> & ...
- Request.Form接收不到post数据.
Request.Form接收不到post数据. https://q.cnblogs.com/q/62635/ Content-Type 有没有设置为 application/x-www-form-ur ...
- MyBatis日志配置
关于MyBatis的日志,其实MyBatis已经弄得很好了,你甚至都不用配置,只要导入了jar包,MyBatis就会自动寻找. 具体步骤 1.导入jar包,就是把下载MyBatis时,lib里的包复制 ...
- JS提交对象数组到服务端的方法总结(C#实例)
*转载请注明出处: 作者:willingtolove: 本文链接:http://www.cnblogs.com/willingtolove/p/4741549.html 正文: 1. 方法一:利用aj ...
- vtkQuadratic创建半球面
用的关键类:vtkQuadric.vtkSampleFunction.vtkContourFilter:用于创建方框的类vtkOutlineFilter #ifndef INITIAL_OPENGL ...
- 10、代码块、构造代码块、静态代码块及main方法之间的关系
1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...
- 关于JavaScript设计模式(一)
以后都在简书写文章了,所以这个转载我在简书中写的.地址这里 http://www.jianshu.com/p/c7b3c2c148c5
- Ajax商品分类三级联动实现
思路分析: 效果:当页面加载时,利用ajax异步向后台请求数据,加载一级商品类别,当选择一级商品时加载二级商品,选择二级商品加载三级商品. 实现: 1.当拿到数据后加载pid为0的商品,并动态创建op ...
- Ecmascript 6新特性
声明变量由var变成let.let实际上为JavaScript新增了块级作用域.let与var相比具有的特性有 1.不允许重复声明一个变量 var a=5; var a=7; let b=6; let ...
- Java实现比较版本号
涉及到客户端的系统中经常需要用到比较版本号的功能,但是比较版本号又不能完全按照字符串比较的方式去用compareTo之类的方法: 这就需要我们总结版本号的通用规则,设计一个比较算法并封装成通用方法来使 ...