2009-09-19 65 views
0

我想了解各種代碼庫,我認爲它們都是微軟的代碼庫。示例庫包括atls.lib,atlsd.lib,libcmtd.lib,libcpmtd.lib。你能否指點我一個很好的在線參考或其他方式來了解這些庫?瞭解微軟的代碼庫

澄清:我希望能找到一個通用的學習微軟庫的種類索引。可悲的是,當我在網上搜索「libcmtd」之類的東西時,我只是從他們的代碼出現問題的人那裏獲得帖子。由於Google在前幾頁內沒有報告任何看起來有希望的內容,因此可能沒有任何內容,但值得提問。

回答

3

ATLS.LIB是ATL的靜態版本。 (ATLSD.LIB是其調試版本。)ATL文檔從這裏開始:http://msdn.microsoft.com/en-us/library/t9adwcde.aspx

LIBCMTD.LIB和LIBCPMTD.LIB是C和C++運行時庫的調試版本。它們是非常標準的實現,所以任何C和C++庫引用都可以。微軟將他們記錄在MSDN上。通過「調試版本」,我的意思是這些版本的庫有額外的檢查,以幫助發現運行時的錯誤。這些通常適用於您的調試版本。在構建發佈版本時,您可能需要從文件名中刪除最終'd'的常規版本。

+0

...和'mt'後綴意味着從多線程代碼中調用該庫是安全的(例如,以便多線程調用'malloc'或'operator new'是安全的)。 – ChrisW 2009-09-20 00:20:46

+1

另外,至少對於mscrtdXX,VSXXX可再發行組件包中不包含調試版本,因此您無法分發針對調試C運行時編譯的程序。我不確定這是法律上的原因還是隻是出於慣例。 – 2009-09-20 00:29:24

0

此外,msvcrt.lib和msvcrtd.lib是c運行時庫,如果您使用MF Microsoft基礎類。

還有所有這些庫的unicode版本。

請參閱afx.h並查找一組#ifdef,默認情況下,它將選擇使用哪個庫到 「使用」,並在輸出中放置註釋庫註釋。

在很多情況下,如果您從不同源獲取庫(共享或不共享)或來自不同版本的相同源,則由於此原因實際上不可能鏈接。

基本上,MS通過編譯時決定編譯時間做出大量編譯時間決定,比如決定你的庫將連接的內容,還是決定所有程序只說unicode或非unicode 。

您不能鏈接爲調試編譯的模塊和未編譯爲調試的模塊。 你爲什麼想要?因爲你從某個地方獲得了一個圖書館來鏈接。如果該庫與Windows進行任何操作,它將強制您使用所有非調試編譯來使用它,前提是它是一個無調試庫。 (例外的情況是,庫不依賴於c運行時庫,ATL或者MFC。具有諷刺意味的是C/C++在非C++庫中工作得更好,並且諷刺的是,Windows對不使用庫的工作更好,一個窗口(mfc或atl)。)

請注意,不再需要購買軟件庫來幫助在Windows中執行此操作? MS讓它變得不可能。你將不得不做32,是32版本,以涵蓋所有的MFC/ATL/Cruntime的可能性,即使如此,它不會工作,因爲 許多MS庫不會鏈接或將鏈接,並將不會在 似乎鏈接好的組合。