• Error C1189: #error: Please use the /MD switch for _AFXDLL builds(转)


    原文转自 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。

  • 相关阅读:
    那些年伴我一起成长的SAP装备
    1079. Total Sales of Supply Chain (25)
    1132. Cut Integer (20)
    1074. Reversing Linked List (25)
    1071. Speech Patterns (25)
    1070. Mooncake (25)
    1067. Sort with Swap(0,*) (25)
    1063. Set Similarity (25)
    1066. Root of AVL Tree (25)
    1059. Prime Factors (25)
  • 原文地址:https://www.cnblogs.com/happykoukou/p/7987106.html
Copyright © 2020-2023  润新知