Qt Dll总结——链接库预备知识(转载)
1、链接库概念
静态链接库和动态链接库介绍
我们可以创建一种文件里面包含了很多函数和变量的目标代码,链接的时候只要把这个文件指示给链接程序就自动地从文件中查找符合要求的函数和变量进行链接,整个查找过程根本不需要我们操心。
这个文件叫做 “库(Libary)”,平时我们把编译好的目标代码存储到“库”里面,要用的时候链接程序帮我们从库里面找出来。
静态链接库:
在早期库的组织形式相对简单,里面的目标代码只能够进行静态链接,所以我们称为“静态库”,静态库的结构比较简单,其实就是把原来的目标代码放在一起, 链接程序根据每一份目标代码的符号表查找相应的符号(函数和变量的名字),找到的话就把该函数里面需要定位的进行定位,然后将整块函数代码放进可执行文件 里,若是找不到需要的函数就报错退出。
静态库的两个特点:
1、链接后产生的可执行文件包含了所有需要调用的函数的代码,因此占用磁盘空间较大。
2、如果有多个(调用相同库函数的)进程在内存中同时运行,内存中就存有多份相同的库函数代码,因此占用内存空间较多。
动态链接库:
动态链接库就是为了解决这些问题而诞生的技术,顾名思义,动态链接的意思就是在程序装载内存的时候才真正的把库函数代码链接进行确定它们的地址,并且就算有几个程序同时运行,内存也只存在一份函数代码。
动态库的代码必须满足这样一种条件:能够被加载到不同进程的不同地址,所以代码要经过特别的编译处理,我们把这种经过特别处理的代码叫做“位置无关代码(Position independed Code .PIC)”.
根据载入程序何时确定动态代码的逻辑地址,可以把动态装载分为两类。
1、静态绑定(static binding)
使用静态绑定的程序一开始载入内存的时候,载入程序就会把程序所有调用到的动态代码的地址算出确定下来,这种方式使程序刚运行的初始化时间较长,不过旦完成动态装载,程序的运行速度就很快。
2、动态绑定(dynamic binding)
使用这种方式的程序并不在一开始就完成动态链接,而是直到真正调用动态库代码时,载入程序才计算(被调用的那部分)动态代码的逻辑地址,然后等到某个时 候,程序又需要调用另外某块动态代码时,载入程序又去计算这部分代码的逻辑地址,所以,这种方式使程序初始化时间较短,但运行期间的性能比不上静态绑定的 程序。
平时默认进行链接的标准 C/C++ 函数就是动态库。
转自:http://qimo601.iteye.com/blog/1396937
转载于:https://www.cnblogs.com/xixi-/p/5585398.html
Qt Dll总结——链接库预备知识(转载)相关推荐
- Qt DLL总结【一】-链接库预备知识
目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 1.链接库概念 静 ...
- Qt DLL总结-创建及调用QT的 DLL
目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 开发环境:VS20 ...
- Qt DLL总结【二】-创建及调用QT的 DLL
目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 开发环境:VS20 ...
- Qt DLL总结【三】-VS2008+Qt 使用QPluginLoader访问DLL
目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 开发环境:VS20 ...
- 动态链接库dll,静态链接库lib, 导入库lib 转
动态链接库dll,静态链接库lib, 导入库lib 在用VS编译工程的时候,我们会选择动态链接库dll,静态链接库lib(static library),可是为什么在编译动态链接库的时候也可以指定输出 ...
- Qt:55---QT创建和使用静态链接库(.lib、.a)
一.QT的静态链接库 QT创建一个静态链接库项目,设计各种需要导出的类,包括具有UI的窗体类.对话框类.编译后可以生成一个lib文件(MSVC编译器生成的文件后缀为".lib",M ...
- linux下静态链接库和动态链接库
关于链接库的知识,网上太多资料了,但是并不代表我很熟悉.今天遇到了 一个问题,就是由于静态链接库和ubuntu系统不兼容导致的,虽然花了点时间才搞定 但是,其中暴露的问题也不少. 没有区分好静态链接库 ...
- ios 编译链接库问题
一.场景 最近在集成数据库sqlite开发,在集成的过程中,需要加入库文件支持libsqlite3, 在添加这个库的时候也遇到过一个坑: 在usr/lib 目录下: 千万不要被上面那个3.0.d ...
- vc6.0静态链接库的创建与使用方法
1.建立如下的工程 选择该界面的最后一个,即创建了一个静态链接库,注意填写工程的名称. 2.在该工程下创建lib.h和lib.cpp两个文件 lib.h中源代码如下: #ifndef LIB_H #d ...
最新文章
- IBM与思科在融合型基础设施领域实现另一突破
- 第一课.Linux系统的介绍与ubuntu虚拟机安装
- loj10095 间谍网络
- 【DIY】震精!他居然用esp8266做出掌上游戏机......恐龙跑酷游戏还能这样玩!请广泛转发!...
- netty+mina 区别概要
- 匿名函数、冒泡排序,二分法, 递归
- MySQL grant 权限,分别可以作用在多个层次上
- 上海理工大学:用数字技术打响智慧抗疫信息战
- 最简单的基于FFmpeg的移动端例子:Android 推流器
- FFMPEG 库移植到 VC 需要的步骤
- SSRF 服务器端请求伪造
- html css 美化模板,通用css样式,全局css样式,css样式模板,
- 定性分析 or 定量分析
- Python中shape简易用法
- AD软件出现“Your license is already used on computer “LAPTOP-F99R6OR1“ using product “AltiumDesigner“
- 小学计算机教师业务笔记,信息技术教师业务学习笔记
- VMware Workstation 16 Pro及Centos 7 x86-64 iso镜像 安装 激活 使用 及 解决vm安装报错eulas_agreed=1
- 河南理工大学2018暑假集训第二次积分赛 2018/07/29
- win7 exfat补丁_微信内测版,Win7停更?你知道吗?(内有福利)
- 贝叶斯条件概率/贝叶斯网络
热门文章
- 当医疗遇上人工智能,你不可不知的未来医疗5大趋势
- 基于深度学习的NLP 32页最新进展综述,190篇参考文献
- 超20亿!2018年国家自然科学基金(重点项目)出炉!
- “计算机艺术之父”、现代计算机技术先驱查理斯·苏黎去世,享年99岁
- 摊手:工作五年我拿了两次 N+1 赔偿!
- 编程能力差!90%输在这点上!谷歌AI专家:其实都是瞎努力!
- 2013年蓝桥杯省赛C/C++A组真题解析
- Django框架之初识
- Java枚举类使用和总结
- 马云口中的“计划经济”其实是一种大数据和人工智能