Windows 编译器选项 Runtime Library

https://msdn.microsoft.com/library/2kzt1wy3(v=vs.100).aspx

http://blog.csdn.net/ybxuwei/article/details/9095067

/MD 动态链接

使应用程序使用运行库的多线程并特定于 DLL 的版本。 定义 _MT 和 _DLL,并使编译器将库名 MSVCRT.lib 放入 .obj 文件中。

用此选项编译的应用程序静态链接到 MSVCRT.lib。 此库提供允许链接器解析外部引用的代码的层。 实际工作代码包含在 MSVCR100.DLL, 中,该库必须在运行时对于与 MSVCRT.lib 链接的应用程序可用。

/MDd 动态链接debug

定义 _DEBUG、_MT 和 _DLL,并使应用程序使用运行库的调试多线程并特定于 DLL 的版本。 它还使编译器将库名 MSVCRTD.lib 放入 .obj 文件中。

/MT 静态链接

使应用程序使用运行库的多线程静态版本。 定义 _MT 并使编译器将库名 LIBCMT.lib 放入 .obj 文件中,以便链接器使用 LIBCMT.lib 解析外部符号。

/MTd 静态链接debug

定义 _DEBUG 和 _MT。 此选项还使编译器将库名 LIBCMTD.lib 放入 .obj 文件中,以便链接器使用 LIBCMTD.lib 解析外部符号。

/LD

创建 DLL。

将 /DLL 选项传递到链接器。 链接器查找 DllMain 函数,但并不需要该函数。 如果没有编写 DllMain 函数,链接器将插入返回 TRUE 的 DllMain 函数。

链接 DLL 启动代码。

如果命令行上未指定导出 (.exp) 文件,则创建导入库 (.lib);将导入库链接到调用您的 DLL 的应用程序。

将 /Fe(命名 EXE 文件) 解释为命名 DLL 而不是 .exe 文件;默认程序名成为基名称.dll 而不是基名称.exe。

除非显式指定 /MD,否则将暗指 /MT。

/LDd

创建调试 DLL。 定义 _MT 和 _DEBUG。

  • MT MTd 多用于多线程(链接线程安全的CRT)静态库,

  • MD MDd用于多线程(链接线程安全CRT)动态库。

  • ML MLd 用于单线程(链接非线程安全CRT)静态库。

http://www.cnblogs.com/cswuyg/archive/2012/02/03/2336424.html


 C 运行时库                                                                库文件
	- Single thread                   (static link)            ML       libc.lib
	- Debug single thread        (static link)            MLd      libcd.lib
	- MultiThread                     (static link)            MT       libcmt.lib
	- Debug multiThread         (static link)            MTd      libcmtd.lib
	- MultiThread                     (dynamic link)       MD       msvert.lib
	- Debug multiThread         (dynamic link)       MDd      msvertd.lib 

3. 各种 C 运行时库的区别
( 1 )静态链接的单线程库
静态链接的单线程库只能用于单线程的应用程序, C 运行时库的目标代码最终被编译在应用程序的二进制文件中。通过 /ML 编译选项可以设置 Visual C++ 使用静态链接的单线
程库。
( 2 )静态链接的多线程库
静态链接的多线程库的目标代码也最终被编译在应用程序的二进制文件中,但是它可以在多线程程序中使用。通过 /MT 编译选项可以设置 Visual C++ 使用静态链接的多线程库。
( 3 )动态链接的运行时库
动态链接的运行时库将所有的 C 库函数保存在一个单独的动态链接库 MSVCRTxx.DLL 中, MSVCRTxx.DLL 处理了多线程问题。使用 /MD 编译选项可以设置 Visual C++ 使用动态
链接的运行时库。

======================

上面此项目生成
静态库 MT, MTd,
动态库 MD ,MDd,
如果我们这个项目还要依赖其他库,链接第三方动态库,静态库呢?

项目=>
配置=>
Linker=>

添加目标库的目录
Additional Library Directories: $(SolutionDir)lib\x86;

添加目标库
Additional Dependencies: 写入要加的库就可以了 PocoFoundationmt.lib;PocoNetmt.lib;PocoUtilmt.lib;

要链接的库要看仔细, x86,x64 release debug, 静态库还是动态库

如果是动态库,则还需要把第三方的DLL,放到要运行的工程目录中。

静态库则不用。

posted @ 2016-02-25 10:54  scott_h  阅读(474)  评论(0编辑  收藏  举报