本文转自:https://blog.csdn.net/u012273127/article/details/71419499

一、问题的引出

最近在VS2012中新建了一个MFC的工程,在自己电脑上运行很好,但是当拷贝到同学电脑上的时候一直出现“差dll”或者是“应用程序无法启动”的错误。后来找出原因,是自己编译的时候选择静态还是动态编译的问题。

解决办法1:让同学安装了VS2012,注意这里必须是和自己编译器相同的版本,比如是2013就不行。

解决办法2:在自己这边用静态编译,重新生成可执行文件即可。

二、动态和静态编译的区别

1、区别:动态编译的生成的可执行文件的exe小,但是运行需要系统环境具有相关的dll文件,就是动态调用系统相关的文件才能运行;静态编译生成的可执行文件exe大,但是运行的时候不依赖于系统环境所依赖的dll和lib等环境问题,在编译的时候已经这些dll相关文件编译进了exe文件,所以exe文件较大,但是执行的时候不会依赖于系统环境。所以需要自己创建的工程需要在别的电脑上运行,考虑到稳定性,同时对执行文件的大小没有要求的话还是尽量选择静态编译。

2、VS中两种编译状态的设置:在工程的“属性”中进行修改。具体截图如下:

共享dll – 动态编译;静态库中使用 – 静态编译。

三、MD、MDd、MT、MTd编译

1、设置:在设置动态和静态编译后就需要对“C/C++ –> 代码生成 –> 运行库”进行设置,具体截图如下:

2、编译形式和四种运行库的配置关系如下:

(1)、静态编译: debug状态下 – MTd; release状态下 – MT

(2)、动态编译: debug状态下 – MDd;release状态下 – MD

记住:静态编译为T,动态编译为D,debug下有个字母d,release下没有字母d

四、测试

在VS2012中新建一个MFC对话框工程,分别配置和设置。

1、动态编译debug下: exe大小为185KB

2、动态编译release下: exe大小为88.5KB(release版本下少了很多中间文件所以比debug下的小)

3、静态编译debug下: exe大小为8.81MB

4、静态编译release下: exe大小为3.37MB(release版本下少了很多中间文件所以比debug下的小)

可以明显注意到静态编译的生成的exe文件比动态生成的exe文件要大很多,因为编译的时候将相应的dll也编译进去exe之中,所以exe的大小会很大。

mysql.lib 是mtd mdd_动态、静态编译以及MD、MDd、MT、MTd编译相关推荐

  1. /MD /MDd /MT /MTd

    在VC下面,有4个参数是跟静态/动态编译有关的.    /MD  /MDd  /MT  /MTd 其中, MT , MTd可以认为是静态编译.也就是说,设置成MT, MTd后编译出来的*.exe程序在 ...

  2. VS 编译时 /MD 与 /MT、/MTD与/MDD的区别

    VS在 属性页的 C/C++ -> Code Generation -> Runtime Library 一项中总共有四个选项 /MD 与 /MT./MTD与/MDD,它们分别有什么区别? ...

  3. mysql.lib 是mtd mdd_MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题

    这个话题要从哪里说起呢.博主小白一个,最近调试程序时(WIN-MSVC)连一些基本问题都没弄懂,本着遇见问题一定要解决的原则,下面来说下MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题 ...

  4. Linux下快速静态编译Qt以及Qt动态/静态版本共存

    Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-open ...

  5. VC环境下的静态库(lib)使用和动态库(Dll)的使用(清晰版)

    VC环境下的静态库使用 一.  静态库包括.lib和.h文件,在工程中使用静态库分为3步: <1> 在工程中加入静态库,有三种方法: **方法一:项目设置中引用.lib,project-& ...

  6. vs编译c语言停止工作运行库mt,vc++编译时运行库选择(/MT/MTd/MD/MDd)

    vc++编译时运行库选择(/MT/MTd/MD/MDd) vc++编译时运行库选择(/MT./MTd./MD./MDd) 在vs中,项目属性 ->C/C++ ->代码生成 ->运行库 ...

  7. 【C/C++10】天气APP:MySQL/PostgreSQL,环境变量/动静态库,Linux/Oracle字符集

    文章目录 1.MySQL:decimal,find . .-print 2.PostgreSQL:$ 3.环境变量:tnsnames.ora,curl 3.1 对单一用户生效: .bash_profi ...

  8. .h头文件 .lib库文件 .dll动态库文件之间的关系

     .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和li ...

  9. ssh源码编译安装mysql_总结源码编译安装mysql

    最近在学习源码编译安装LAMP.LNMP时,一直遇到一个难题,就是就是mysql无论怎么源码编译安装,到最后启动服务都提示"Starting MySQL.The server quit wi ...

最新文章

  1. SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
  2. 通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 – Part 2
  3. HelloX项目github协同开发指南
  4. 数据挖掘导论读书笔记9聚类分析
  5. Struts2之Ognl
  6. 我隐藏的Excel工作表 你别想取消
  7. librtmp协议分析---RTMP_SendPacket函数
  8. 第一次正经面试之发现自己的缺陷和不足
  9. 2016-2017NBU期末考试记录
  10. matlab矩阵内存预分配
  11. 第十五章 第十五章 异步A3C(Asynchronous Advantage Actor-Critic,A3C)-强化学习理论学习与代码实现(强化学习导论第二版)
  12. 增强网络安全意识——如何5分钟破解校园网上网账号和密码
  13. ems苹果专线投递速度_苹果官网运抵速度让人欲罢不能
  14. 什么是SaaS?SaaS系统有什么特征?
  15. 如果心酸就会心动也应行动
  16. 科大讯飞往届生招聘_我从飞往西雅图的最后一波设计采访中学到的东西
  17. C++的STL中accumulate的用法
  18. projectManager
  19. 步进电机替换伺服电机如何计算?
  20. T大计算机科学本科参考书目

热门文章

  1. Django DRF ViewSet(十)
  2. windows10 家庭版 安装docker
  3. Window服务器指定某软件/服务开机自启动
  4. Ubuntu-20.04-live-server无人值守安装
  5. 如何为几乎所有电话添加无线充电
  6. 用Python解析HTML,BeautifulSoup使用简介
  7. IVD-Net:多模态UNet在MRI中的椎间盘定位和分割
  8. dns被污染后应该怎么办?
  9. 解决:电脑主机一会儿自动关闭又自动启动又自动关闭...这样循环往复怎么办?主机用着用着突然关机怎么回事?
  10. 昆虫有趋光性?我来告诉你,并不是!