美文网首页C++面试题集C++
静态编译、动态编译、静态链接、动态链接

静态编译、动态编译、静态链接、动态链接

作者: saviochen | 来源:发表于2017-08-30 16:18 被阅读82次
1、静态编译:

静态编译就是编译器在编译可执行文件时,将可执行文件需要调用的部分从对于动态库中提取出来,链接到可执行文件中去,使可执行文件在运行时不依赖与动态链接库。

2、动态编译

动态编译的可执行文件需要附带一个动态链接库。在执行时,需要调用其动态链接库中的命令。

优点在于:缩小了执行文件的体积,另一方面是加快了编译速度,节省了系统资源。缺点在于:哪怕是只调用了动态链接库中的一两个命令,也需要附带相对庞大的链接库;如果计算机上没有安装相应的动态链接库,则动态编译的可执行文件就不能运行。

3、静态链接

静态链接时指把要调用的函数或过程直接链接到可执行文件中,称为可执行文件中一部分。可执行文件中包含所有需要的代码。

缺点在于当多个程序都调用相同函数时,内存就会存在这个函数的多个拷贝,这样就浪费了内存资源。

5、动态链接

动态链接是相对静态链接而言的,动态链接所调用的函数代码并没有拷贝到应用程序的可执行文件中去,而仅仅是在其中加入了所调用函数的重定位信息。当应用程序被调入内存时,在操作系统的管理下,才在应用程序与相应的动态链接库之间建立链接关系。当要执行动态链接库中的函数时,根据链接产生的重定位信息,操作系统才转去执行相应的函数代码。

静态链接的可执行程序能够在同类操作系统的机器上直接运行。动态链接的可执行文件缺少动态链接库则不可运行。

相关文章

  • 静态编译、动态编译、静态链接、动态链接

    1、静态编译: 静态编译就是编译器在编译可执行文件时,将可执行文件需要调用的部分从对于动态库中提取出来,链接到可执...

  • gcc_clang的使用_day93

    编译命令 编译流程 预编译 编译 链接, 动态链接/静态链接 编写文件 add.c clang -g -c ad...

  • chap 7

    1. 静态链接;加载时共享库的动态链接;运行时共享库的动态链接。 2. 预编译 编译 汇编 链接 加载...

  • iOS静态库和动态库的区别

    iOS开发中静态库和动态库区别: 静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程...

  • iOS静态库和动态库的使用

    iOS开发中静态库和动态库区别 静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序...

  • iOS中的静态库和静态库

    一、静态库和动态库的含义 所谓静态和动态是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序运行时...

  • iOS开发-动态库加载(实时模块更新)

    动态库和静态库 静态库和动态库是相对编译期和运行期:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改...

  • iOS 静态库Framework开发(包含静态库,bundle使

    静态库和动态库 静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要...

  • java静态代理与动态代理简单分析

    原链接地址 1、动态代理(Dynamic Proxy) 代理分为静态代理和动态代理,静态代理是在编译时就将接口、实...

  • iOS静态库及动态库

    2018-06-19 浅析静态库链接原理编译原理以及什么是静态库和动态库 转之: iOS 静态库和动态库(库详解)...

网友评论

    本文标题:静态编译、动态编译、静态链接、动态链接

    本文链接:https://www.haomeiwen.com/subject/zmatjxtx.html