编译多线程应用程序的第一步是要确保编译器使用了正确的运行时库:MS为C运行时库提供了几个不同的实现。这些版本在以下3个标准上有所不同:链接方式(静态or动态)、是否可再入(有一个库是为单线程应用程序设计的,是不可再入的;另一个库是为多线程设计的,是可再入的)、以及是否包含调试符号。
开关 | 含义 |
/MT | 使用静态链接的多线程应用程序 |
/MTd | 多线程应用程序调试使能 |
/MD | 多线程动态链接库 |
/MDd | 多线程动态链接库调试 使能 |
支持C程序的微软多线程库:
程序类型 | C运行时库 |
多线程程序 | LIBCMT.LIB |
支持调试的多线程程序 | LIBCMTD.LIB |
多线程DLL程序 | MSVCRT.LIB(MSVCRT.DLL的引入库) |
支持调试的DLL程序 | MSVCRTD.LIB(MSVCRTD.DLL的引入库) |
支持C++程序的微软多线程库:
程序类型 | C++运行时库 |
多线程程序 | LIBCPMT.LIB |
支持调试的多线程程序 | LIBCPMTD.LIB |
多线程DLL程序 | MSVCPRT.LIB(也使用MSVCRT.DLL) |
支持调试的DLL程序 | MSVCPRTD.LIB(也使用MSVCRTD.DLL) |
开发人员不能在单个进程空间中混合使用静态和动态库。当一个exe文件用到一个dll时,需要有开发人员保证使用相同版本的C运行时库来正确的构建exe和dll。
More:http://blog.donews.com/me1105/archive/2011/01/26/98.aspx