RuntimeLibrary 的不匹配项以及在VS中常见的编译错误问题以及解决方案

在工程中有时候需要引入外部的lib最常出现的一个错误就是 运行库不匹配 这个问题解决方法如下

在工程上右键-》属性-》c/c++-》代码生成-》运行库 进行设置
有四个选项及含义分别如下:
多线程调试Dll (/MDd) 对应的是:静态库的Debug版本
多线程Dll (/MD) 对应的是:静态库的Release版本
多线程(/MT) 对应的是:动态库的Release版本
多线程(/MTd)对应的是:动态库的Debug版本


然后将引入的库和工程应用的运行库保持一致就行

例如:工程使用的是静态库的Debug版本 那么对应的lib库也要使用静态的Debug版本 这样保持一致一般就不会出现问题了


在编译MFC程序的时候出现下列及类似的错误:
1>uafxcwd.lib(afxmem.obj) : error LNK2005
1>uafxcwd.lib(afxmem.obj) : error LNK2005


这个问题就是 两个属性的设置问题

解决方法如下: 
项目属性页-》链接器-》输入 
顺序一定是下面这个顺序
附加依赖库:uafxcwd.lib;LIBCMTD.lib;

忽略特定默认库:LIBCMTD.lib;uafxcwd.lib

错误原因:这两个库都有自己的New和Delete方法,会冲突 所以需要指定顺序


补充问题:

问题一:新的IDE对以前的函数可能存在一个报错问题

例如:fopen在VS2017中就会出现一个关于This function or variable may be unsafe ……这样的问题,提示出现关键字【_CRT_SECURE_NO_WARNINGS

解决方法:点击项目--》属性--》c/c++--》预处理器--》预处理定义--》将关键字【_CRT_SECURE_NO_WARNINGS】添加进去就行了


问题二:关于VS2017的注释问题

解决方法:

注释:     先CTRL+K,然后CTRL+C
取消注释: 先CTRL+K,然后CTRL+U
输出标准格式: 先CTRL+K,然后CTRL+F

左缩进: shift + Tab


问题三:每次调试的时候都会加载符号的问题

打开VS的【工具】-【选项】-【调试】-【符号】,如下图:
1、先取消勾选“Microsoft符号服务器”
2、点击“清空符号缓存”
3、重启VS20xx
参考文档:

https://blog.csdn.net/hellokandy/article/details/51393306


问题四:在VS中打开工程小红线问题

检查库和头文件都包含进去的情况下没有用就重启VS


问题五:在VS中编译Win32程序出现问题:“令牌匹配错误……”

修改配置属性
常规 平台工具集 修改到 VS2015就可以解决这类问题了
在控制台程序中使用MFC资源 需要添加头文件 Afx.h 并且工程设置为 MT 静态库的多线程模式

这样就可以在控制台程序中使用MFC中的类了


猜你喜欢

转载自blog.csdn.net/Wuzm_/article/details/80277381