C++ 控制台程序,窗口程序,静态库,动态库的区别
创建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文件体积变大,由于是拷贝的源码,所以在发布后并不需要静态库的支持就可以运行。
动态库:当可执行文件在运行时使用到了动态库,此时会在该进程的某个地址加载该动态库,提取所需要的函数或数据,若使用之后在不需要的时候也可以卸载(使用动态库里的某个函数),并且可以被多个进程调用,由于是动态加载,在发布时并没有添加到可执行文件中,所以体积会小一些。并且具有强依赖关系。
静态库不能在包含其他的动态库文件或者静态库文件。而动态库却可以。
C++ 控制台程序,窗口程序,静态库,动态库的区别相关推荐
- Linux系统程序运行时加载动态库路径顺序
程序运行时加载动态库路径顺序(Linux) 在linux系统中,如果程序需要加载动态库,它会按照一定的顺序(优先级)去查找: 链接时路径(Link-time path)和运行时路径(Run-time ...
- linux直接运行程序加载动态库失败,扣丁学堂Linux培训详解程序运行时加载动态库失败解决方法...
今天扣丁学堂Linux培训老师给大家介绍一下关于Linux程序运行时加载动态库失败的解决方法,希望对同学们学习有所帮助,下面我们一起来看一下吧. Linux下不能加载动态库问题 当出现下边异常情况 . ...
- C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项
0. 引言 UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统.linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统. ...
- Linux-(C/C++)生成并使用静态库/动态库
静态库/动态库概要 在Windows下静态库的后缀为:.lib.动态库后缀为:.dll:而在Linux下静态库的后缀为:.a.动态库的后缀为:.so. 那么什么是静态库呢? 首先我们来看看程序编译的大 ...
- XCode 创建:静态库 动态库 Framework
目录 使用 XCode 创建 .a 格式的静态库 使用 XCode 创建 .framework 格式的静态库 使用 XCode 创建 .dylib 格式的动态库 使用 XCode 创建 .framew ...
- Linux学习---静态库 动态库
今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在Linux操作系统中,普遍使用E ...
- 【win32】day11-windows的库/静态库/动态库
Windows的库 由于项目的复杂程度,或者为了提高代码的 重用率等等,所以才引入了库程序. 库包含两种: 1 静态库:扩展名为LIB的文件,是不能被 加载的程序,可以理解为目标程序的 归档. 2 动 ...
- 软件库Library之静态库\动态库和静态加载\动态加载
软件库Library之静态库\动态库和静态加载\动态加载 动态库之导入库 https://blog.csdn.net/wallaceli1981/article/details/5740718 * 动 ...
- NDK01-打包静态库 动态库在mk和cmake环境配置使用
动态库和静态库 动态库: libxxx.so 运行的时候,才会去加载,加载一次就在内存中存在副本,其他地方使用就都是公用的.使用场景就是 高德百度sdk对外开房 静态库: libxxx.a 编译期把静 ...
- 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )
文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...
最新文章
- qt中用mysql获取所有的数据库、数据库中的表名
- linux挂载和卸载
- spark的Web UI中的Storage啥信息都没有
- 华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)
- MySQL 创建索引和索引效率验证
- 如何在DOS下用TCP/IP协议进行登录Windows 2K?
- 【[Offer收割]编程练习赛10 C】区间价值
- 【鸿蒙学院】调试鸿蒙(HarmonyOS)App源代码的两种方式
- Java动态数组的实现
- Unity技术分享之Mac环境下dll反编译
- 小米科技面试题-互联网老辛整理
- 7654:等差数列末项计算
- 【毕业设计】大数据分析的客户细分 (聚类分析) - python k-means
- AUTO_INCREMENT
- HLK-W801-LVGL8之横屏显示
- 【Some】【心学】心学精华,人生要旨
- hdu 多校赛 第二场
- 有道云笔记客户端收起左侧目录边栏方法
- 李彦宏一句“车水马龙”,中国AI的一幕天地宽广
- YOLO v1论文详解