创建C++程序
控制台程序
创建完成发现编译器给我们生成了一个.cpp文件,并且存在main函数(说明可以运行)
按F5编译链接并运行 出现DOS窗口(但我们说写与窗口相关的代码,说明是操作系统提供的)
输出目录生成的文件
窗口程序
创建完成我们发现生成了许多文件
打开.cpp文件我们发现了许多处理窗口的代码,并包含一个main函数
F5运行生成了一个新窗口(该窗口由我们自己定义),并且可以与用户交互
输出目录生成的文件
静态库程序
静态库程序一般用来存放代码或者数据,可以执行文件可以获取静态库程序的数据
生成完发现静态库程序并没有main函数
按F5发现编译链接成功,但无法启动程序(因为没有main函数)
输出目录生成的文件
动态库程序
创建成功发现动态库程序也是存在入口函数的(DLLMain)
F5运行出现于静态库程序一样的错误,并且编译链接都已完成,
输出目录生成的文件
对比结果
1:入口函数
控制台程序 - main
窗口程序 - WinMain
动态库程序 - DllMain
静态库程序 - 无口函数
2:生成的产物
控制台程序 - exe文件
窗口程序 - exe文件
动态库程序 - DLL文件
静态库程序 - Lib文件
3:作用
控制台程序 - DOS程序,本身没有窗口,通过系统提供的DOS窗口执行
窗口程序 - 拥有自己的窗口,并可以与用户交互
动态库程序 - 存放代码和和数据,供可执行文件调用,
静态库程序 - 存放代码和和数据,供可执行文件调用
4:静态库与动态库的区别
静态库:编译器在编译链接时会把在使用静态库的地方,将源码从静态库中原封不动的拷贝到可执行文件中(exe),这将会导致.exe文件体积变大,由于是拷贝的源码,所以在发布后并不需要静态库的支持就可以运行。
动态库:当可执行文件在运行时使用到了动态库,此时会在该进程的某个地址加载该动态库,提取所需要的函数或数据,若使用之后在不需要的时候也可以卸载(使用动态库里的某个函数),并且可以被多个进程调用,由于是动态加载,在发布时并没有添加到可执行文件中,所以体积会小一些。并且具有强依赖关系。
静态库不能在包含其他的动态库文件或者静态库文件。而动态库却可以。