静态编译、动态编译、静态链接库和动态链接库理解
来源:互联网 发布:淘宝 英语教练 编辑:程序博客网 时间:2024/05/17 12:21
转自http://www.cnblogs.com/lisuyun/p/3953589.html
1.静态编译:编译器在编译可执行文件时,把需要用到的对应动态链接库(.so或.ilb)中的部分提取出来,链接到可执行文件中去,
使可执行文件在运行时不需要依赖于动态链接库.
2.动态编译: 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一
方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接
库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文
件就不能运行。
静态编译:
静态lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序。
动态编译:
动态lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,运行时
候需要相应的dll文件支持。
动态链接库:
创建一个动态链接库,会生成x.dll,x.lib
动态链接库有两种加载方式:
1.一种是静态加载,就是在编译的时候就载入动态链接库。此种方法可调用类方法.
可执行程序静态加载动态链接库需要三个文件 x.dll, x.lib, x.h
可执行程序的头文件加入:
#include "x.h"
#pragma comment(lib,"x.lib")
编译时还要附加库目录,防止程序编译时无法找到x.dll。
2.动态加载
只需要x.dll文件。
在程序执行需要该动态链接库的地方加载x.dll。
然后获取需要的x.dll库里面的函数或数据.
该方法不能调用类方法.
可执行程序调用了动态链接库,其运行不能缺少动态链接库.
静态链接库:
创建一个静态链接库,会生成x.lib文件
想要调用静态链接库里面的内容需要x.lib文件和x.h文件
库中内容会直接编译到x.exe文件中。
可执行程序使用静态库编译成x.exe后,x.exe的运行就不在需要静态链接库了,可以独立运行了。
一般的静态编译可以理解为加载静态链接库;动态编译理解我加载动态链接库。
静态链接库中不能包含其他库,动态链接库中能包含其他库。
- 静态编译、动态编译、静态链接库和动态链接库理解
- 静态编译动态编译;静态链接动态链接;静态库和动态库
- 静态编译动态编译;静态链接动态链接;静态库和动态库
- 静态编译动态编译;静态链接动态链接;静态库和动态库
- 静态编译动态编译;静态链接动态链接;静态库和动态库
- 静态编译,动态编译,静态链接库,动态链接库
- 编译和链接静态库动态库
- 编译和链接静态库动态库
- 编译和链接静态库动态库
- gcc编译动态和静态链接库
- gcc编译动态和静态链接库
- GCC编译动态和静态链接库
- gcc编译动态和静态链接库
- GCC编译动态和静态链接库
- gcc编译动态和静态链接库
- gcc编译动态和静态链接库
- gcc编译动态和静态链接库
- GCC 编译使用动态链接库和静态链接库
- Android Studio如何配置夜神模拟器
- Android Studio的快捷键&nbsp…
- Leetcode 80 Remove Duplicates from Sorted Array II
- 关于listview嵌套gridview
- 一个圆等分的坐标
- 静态编译、动态编译、静态链接库和动态链接库理解
- 四大组件之BroadcastReceiver
- Candy 出去玩
- JQuery请求$.Ajax()
- 利用HTML5的canvas标签实现灰太狼图像的绘制
- hdoj1162-Eddy's picture(kruskal)
- POJ 2761 Feed the dogs(主席树)
- centos 删除多余的启动引导项
- jsp内置对象之page,pageContext,config,exception