对于在使用Visual C++或Visual Studio编写C/C++程序时,有关于运行库的编译选项理解的不是很清楚。在网上查了下资料,总结一下:
动态链接库在生成的EXE文件比较小,但运行的时候需要.DLL文件。
静态链接生库成的EXE文件比较大,当运行的时候不需要.DLL文件。
1、运行时库:VC或VS自带的运行库。(具体的情况有空查资料不上)
2、关于VC/VS运行时库的设置:
Visual C++:在“工程设置(Alt+F7) 》 C/C++ 》工程选项”中修改工程的编译参数
Visual Studio:在“项目 》 属性 》 配置属性 》C/C++ 》 代码生成 》运行库”中修改工程的编译参数。(Visual Studio2010中已经取消单线程也就是/ML和/MLd选项)
3、具体的参数:
Release版:(用于发布)
静态 单线程 库(/ML):使编译器链接"LIBC.lib"静态库。
静态 多线程 库(/MT):定义_MT,并使编译器链接"LIBCMT.lib"静态库。
动态 多线程 库(/MD):定义_MT 和 _DLL,使编译器链接"MSVCR80.DLL"动态库和 "MSVCRT.lib"导入库。
Debug版:(用于调试)
静态 单线程 库(/MLd):定义_DEBUG,并使编译器链接"LIBCD.lib"静态库。
静态 多线程 库(/MTd):定义_DEBUG、_MT,并使编译器链接"LIBCMTD.lib"静态库。
动态 多线程 库(/MDd):定义_DEBUG、_MT,和 _DLL,使编译器链接"MSVCR80.DLL"动态库和"MSVCRTD.lib"导入库。
调用其他(第三方)运行库或自己生成的运行库:
1、第三方提供的运行库如果提供的是动态的就只能动态调用,提供的是静态的就只能够静态调用。
2、动态库一般包括
1.动态库(DLL)文件:放在与生成的EXE文件同目录中,或系统DLL文件查找路径目录(c:/windows或c:/windows/system32)中。
2.头(H)文件 :放在“包含目录”中,并用预编译命令 “#include "头文件.H"”包含进来。
3.导入库(lib)文件 :放在“库目录”中有的动态库会包括导出(exp)文件而不包含导入库(lib)文件,可通过LIB /DEF:*.def /out:*.lib /MACHINE:IX86 创建导入库文件,导出文件和动态库文件应该在同一目录。
3、静态库一般包含:1.静态库(lib)文件,2.头(H)文件。