什么是c运行时库?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014132659/article/details/84308429

nafxcw.lib 和 libcmt.lib冲突问题。
解决办法:
属性设置里让程序先找到nafxcw.lib.
解决办法参考:https://www.cnblogs.com/suiyingjie/archive/2012/10/29/2745031.html

从vs2008 工程属性中,从/MT换成/MD时,出现msvcrt.lib和libcmt.lib冲突警告。
解决办法:
忽略掉libcmt.lib,编译只要能找到lib就行,编译是拷贝lib里面连接符号到程序,所以能找到一份就行,冲突解决掉就可以。

问题点:
1,这俩库分别是什么?
nafxcw.lib 可能是静态mfc库。
libcmt.lib 是c运行时库,多线程静态库。

2,c运行时库是什么?
C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.
C run-time library里面含有初始化代码,还有错误处理代码(例如divide by zero处理)。你写的程序可以没有math库,程序照样运行,只是不能处理复杂的数学运算,不过如果没有了C run-time库,main()就不会被调用,exit()也不能被响应。因为C run-time library包含了C程序运行的最基本和最常用的函数。
那有了c++后,出现了c++运行时库,它包括了上面所说的 C run-time library 和 STL。包含 C run-time library 的原因很明显,C++ 是 C 的超集,没有理由再重新来一个 C++ run-time library. VC针对C++ 加入的Standard C++ Library主要包括:LIBCP.LIB, LIBCPMT.LIB和 MSVCPRT.LIB。

3,单线程和多线程运行库,静态运行库和动态运行库
4,编译选项/ML /MD是什么意思?
这俩编译选项就是选择静态还是动态运行库的。

编译器链接选项:
VC带的编译器名字叫cl.exe,它有几个与标准程序库有关的选项:/ML、/MLd、/MT、/MTd、/MD、/MDd。编译时到底哪个C运行时库联入程序取决于这些编译选项,选项告诉编译器应用程序想使用什么版本的C标准程序库:
/ML对应单线程静态版的运行时库(libc.lib);
/MT对应多线程静态版运行时库(libcmt.lib),此时编译器会自动定义_MT宏;
/MD对应多线程DLL版(导入库msvcrt.lib,DLL是msvcrt.dll),编译器自动定义_MT和_DLL两个宏。
后面加d的选项都会让编译器自动多定义一个_DEBUG宏,表示要使用对应标准库的调试版,因此:
/MLd对应调试版单线程静态标准库(libcd.lib);
/MTd对应调试版多线程静态标准库(libcmtd.lib);
/MDd对应调试版多线程DLL标准库(导入库msvcrtd.lib,DLL是msvcrtd.dll)。
参考博客地址:https://blog.csdn.net/farmwang/article/details/48677769

5,我自己程序中怎么用?
自己要编译库,如果依赖别的库,那两个库的编译选项要一致。

以上问题全部理解了。这篇博客介绍了什么是c运行时库,c++运行时库,以及编译器怎么支持这些库,在以后的开发中很有帮助:
https://blog.csdn.net/wqvbjhc/article/details/6612099

猜你喜欢

转载自blog.csdn.net/u014132659/article/details/84308429