理解C/C++运行时库
一、什么是運(yùn)行時(shí)庫(kù)
運(yùn)行時(shí)庫(kù)(Runtime library)通俗的說(shuō)就是我們的程序運(yùn)行的時(shí)候所依賴的庫(kù)文件,在Windows平臺(tái)這些庫(kù)由微軟提供,并且是以2種形式提供:靜態(tài)庫(kù)(lib)、動(dòng)態(tài)庫(kù)(lib+dll)。每個(gè)庫(kù)還都提供debug、release 2個(gè)版本。
C/C++運(yùn)行時(shí)庫(kù)從形式上來(lái)講和我們自己開(kāi)發(fā)的靜態(tài)庫(kù)、動(dòng)態(tài)庫(kù)沒(méi)什么兩樣,只是它們由微軟開(kāi)發(fā)和維護(hù),并提供了一些常用的功能支持(如malloc,free, printf等等),如果我們的程序需要使用這些功能(事實(shí)上,只要是C/C++程序就一定會(huì)用到運(yùn)行時(shí)庫(kù)提供的功能),就要鏈接C/C++運(yùn)行時(shí)庫(kù)。我們可以自主選擇是鏈接“靜態(tài)庫(kù)”還是“動(dòng)態(tài)庫(kù)”,是鏈接“debug版本”的還是“release版本”的。
二、如何鏈接運(yùn)行時(shí)庫(kù)
大家可能注意到我們?cè)谄綍r(shí)開(kāi)發(fā)中從來(lái)沒(méi)有顯式的來(lái)鏈接這些庫(kù),這是為什么了?
因?yàn)槲覀兊木幾g器為我們提供了便利,我們只需要向編譯器指定特定的編譯選項(xiàng)(如MT、MD、MTd、MDd),編譯器就會(huì)自動(dòng)鏈接對(duì)應(yīng)的庫(kù)。
同時(shí),編譯器會(huì)根據(jù)MT和MD來(lái)定義相應(yīng)的預(yù)處理宏:MT 對(duì)應(yīng) _MT宏,MD對(duì)應(yīng)_MD宏。
例如,我們通過(guò)Visual Studio開(kāi)發(fā)C/C++程序時(shí),在工程屬性中配置“運(yùn)行庫(kù)”為MT、MD、MTd、MDd中的一個(gè):
就相當(dāng)于間接的向編譯器指定編譯選項(xiàng)和定義相應(yīng)的宏。
三、不同版本和形態(tài)的運(yùn)行時(shí)庫(kù)
3.1 運(yùn)行時(shí)庫(kù)對(duì)應(yīng)的文件
下表列出各種編譯選項(xiàng)的含義以及對(duì)應(yīng)的庫(kù)文件:
| ML | Single-Threaded | Release版的單線程靜態(tài)庫(kù) | libc.lib | 從VS2005起被廢棄 |
| MLd | Single-Threaded Debug | Debug版的單線程靜態(tài)庫(kù) | libcd.lib | 從VS2005起被廢棄 |
| MT | Multi-threaded | Release版的多線程靜態(tài)庫(kù) | libcmt.lib | |
| MTd | Multi-threaded Debug | Debug版的多線程靜態(tài)庫(kù) | libcmtd.lib | |
| MD | Multi-threaded DLL | Release版的多線程動(dòng)態(tài)庫(kù) | msvcrt.lib + msvcrxxx.dll msvcprt.lib+msvcpxxx.dll | |
| MDd | Multi-threaded DLL Debug | Debug版的多線程動(dòng)態(tài)庫(kù) | msvcrtd.lib + msvcrxxxd.dll msvcprtd.lib + msvcpxxxd.dll |
如果計(jì)算機(jī)上安裝了多個(gè)版本的VC++運(yùn)行環(huán)境(或者多個(gè)版本的Visual Studio),則相同名稱的lib或dll就會(huì)存在多份。如msvcrt.lib文件:
3.2 運(yùn)行時(shí)庫(kù)文件命名規(guī)則
msvcr100d.dll為例:
ms = Microsoft v = Visual c = C Program r = Run-time 100 = Version d = Debug (不帶d即為release版本)msvcp100d.dll為例:
ms = Microsoft v = Visual cp = C Plus Plus 即C++ 100 = Version d = Debug (不帶d即為release版本)四、運(yùn)行時(shí)庫(kù)使用注意事項(xiàng)
- 不要混合使用運(yùn)行時(shí)庫(kù)的靜態(tài)庫(kù)版和動(dòng)態(tài)庫(kù)版。
- 不要混合使用運(yùn)行時(shí)庫(kù)的debug版和release版。
- 不要混合使用不同版本的運(yùn)行時(shí)庫(kù)。
總結(jié)
以上是生活随笔為你收集整理的理解C/C++运行时库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 加快Android Studio的编译速
- 下一篇: Windows常用运行库(VC++、Di