原文连接地址:http://www.javashuo.com/article/p-uhxybsrr-bq.htmlhtml
参考资料:性能
http://blog.csdn.net/laogaoav/article/details/8544880优化
http://stackoverflow.com/questions/18612072/link-warning-lnk4098-defaultlib-msvcrt-conflicts-with-use-of-other-libs-usspa
正文:.net
为了看这个 错误是怎么出来的,首先建立一个Win32工程:新建->项目->Win32项目->下一步->静态库->取名为ADDLIB命令行
好,添加一个类,以下code
// Adder.h #pragma once class Adder { int x, y; public: Adder(int x, int y); int result(); }; // ---------------------------------- // Adder.cpp #include "Adder.h" Adder::Adder(int xx, int yy) :x(xx), y(yy) { } int Adder::result() { return x + y; }
好,选择:生成->配置管理器->Release->肯定htm
接着,生成解决方案,如今你在项目文件夹的Release子文件夹中能够找到ADDLIB.libblog
如今,打开另外一个项目,选择:项目->属性->VC++目录->包含目录->把Adder.h的路径添加进去,而后选择:库目录->把ADDLIB.lib的路径添加进去(即$(ADDLIB_PATH)\Debug\ADDLIB.lib,其中$(ADDLIB_PATH)是你的项目根目录),而后选择:连接器->输入->附加依赖项->把ADDLIB.lib添加进去get
好如今写一段代码使用Adder,例如
Adder a(1,2); int x = a.result();
首先确保这个项目是Debug配置,生成解决方案,报错以下:
1> ADDLIB.lib(Adder.obj) : 找到 MSIL .netmodule 或使用 /GL 编译的模块;正在使用 /LTCG 从新启动连接;将 /LTCG 添加到连接命令行以改进连接器性能 1>LINK : warning LNK4075: 忽略“/INCREMENTAL”(因为“/LTCG”规范) 1>MainWindow.obj : warning LNK4075: 忽略“/EDITANDCONTINUE”(因为“/OPT:LBR”规范) 1>LINK : warning LNK4098: 默认库“MSVCRT”与其余库的使用冲突;请使用 /NODEFAULTLIB:library
看到这里,有经验的话,细心一点就能够看出来,就是由于Debug版本的项目去连接Release版本的 static库形成的错误,因此解决方案就是回到 ADDLIB项目,构建一个Debug版本的ADDLIB.lib,而后这边 Debug的 时候就用Debug\ADDLIB.lib,在Release的时候才用Release\ADDLIB.lib
具体为何是这样 报错呢,很简单,去项目属性里面查看就知道了,Debug配置的时候,C/C++ -> 优化,这个配置项里面“全程序优化”的默认选项是“否,可是在Release配置的 时候,是“是/GL”,因为不匹配,因此报错。一样的,对于C/C++ -> 代码生成,这个配置项里面“运行库”在Debug配置下默认是/MDd,可是在Release下默认是/MD,一样因为不匹配,报错。
因此坚持一个原则,不管是构建lib文件仍是DLL文件,必定既要Debug的版本,也要Release的版本,并且在使用的时候必定要匹配上。才能尽量避免这种问题。若是仍是出现了相似问题,按照上面的思路去查找源头并修改你的配置便可。