原文转自 https://www.cnblogs.com/zwh0214/p/6048360.html

在VS 2013中编译程序时出现错误:

错误提示1:

error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

原因

常规里面是:在静态库中使用MFC,或使用标准Windows库,此时该处可能无论是什么都会报错

运行库中多线程调试是:MDd(多线程调试DLL)

解决方法

将MDd改成MTd,如果改正后报错误2,按下面方法更改。

错误提示2:

error C1189: #error: Please use the /MD switch for _AFXDLL builds 

原因

常规里面是:在共享DLL中使用MFC,

运行库中多线程调试是:MTd(多线程调试)

解决方法

将常规改成:在静态库中使用MFC,或使用标准Windows库

常规和运行库  如下图:

常规:  右击项目->属性->配置属性->常规,然后在右边的“项目默认值”中的“MFC的使用”选项中选择“在静态库中使用MFC”,

多线程调试:  右击项目-->属性->配置属性->c/c++->代码生成->运行时库->多线程调试(/MTd)

相关注释:

MFC的使用,有三种设置:

 1.使用标准Windows库

 2.在静态库中使用MFC:是将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关DLL的机器上运行;

 3.在共享DLL中使用MFC:指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件;

多线程调试

/MD:在dll中使用多线程,创建动态链接库的release版本,需要选择。

/MT: 在exe里使用多线程,创建exe的release版本,需要选择。

/MTd:同/MT一样,不过是在Debug版本中使用。

/MDL:同/MD一样,不过是在Debug版本中使用。

如果是Debug的“在静态库中使用MFC”,不要使用MDd,改用MTd,然后编译即可通过。

如果是Debug的“在共享DLL中使用MFC”,注意不要使用MTd,改用MDd;

如果是Release版本“在静态库中使用MFC”,不要使用MD,使用MT;

如果是Release版本的“在共享DLL中使用MFC”,不要使用MT,使用MD。

最新文章

  1. Maven 命令速记
  2. warning:deprecated conversion from string constant to 'char *' 解决方案
  3. 网站发布在另外一个网站下面配置伪静态之后图片样式和JS丢失
  4. 统计web应用程序的访问人数
  5. python 基础-----数字,字符串,列表,字典类型简单介绍
  6. C#线程调用带参数的方法
  7. Vim 在 windows 环境下的初步配置
  8. 什么是NAS.什么是黑白群晖?(转)
  9. find命令总结
  10. FFmpeg 2.1 试用(新版支持HEVC,VP9)
  11. JavaScript键盘鼠标事件处理
  12. Linux基础系统优化
  13. java异常处理try catch finally
  14. Ubuntu14.04 使用本地摄像头跑ORB SLAM2(暂未完成)
  15. Sql语句拼接(EXEC和sp_executesql的区别)
  16. JavaScript—异步提交表单的6种方式
  17. [js]面向对象2
  18. vue数组赋值
  19. Docker学习笔记二:Docker常用命令及提升拉取镜像的速度
  20. Machine Learning系列--EM算法理解与推导

热门文章

  1. Open source cryptocurrency exchange
  2. PAT (Basic Level) Practice 1004 成绩排名
  3. 树上dfs+思维
  4. 为 dll (类库) 解决方案添加测试项目
  5. Android 懒加载简单介绍
  6. 18 Django-组件拾遗
  7. MyBatis---自动创建表
  8. Javascript Step by Step - 04
  9. linux压缩和解压缩命令大全--费元星站长
  10. 用Fragment实现如新浪微博一样的底部菜单的切换