2009-09-19 49 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库不会链接或将链接,并将不会在 似乎链接好的组合。