天天看点

链接器链接类型(静态/动态)

说明:为什么要用链接器,不想把核心代码给用户,但是用户却能享有这个代码功能,库都是加密的

链接分为两种:静态链接、动态链接。

1)静态链接

静态链接:由链接器在链接时将库的内容加入到可执行程序中。

优点:

  • 对运行环境的依赖性较小,具有较好的兼容性

缺点:

  • 生成的程序比较大,需要更多的系统资源,在装入内存时会消耗更多的时间
  • 库函数有了更新,必须重新编译应用程序

2)动态链接

动态链接:连接器在链接时仅仅建立与所需库函数的之间的链接关系,在程序运行时才将所需资源调入可执行程序。

优点:

  • 在需要的时候才会调入对应的资源函数
  • 简化程序的升级;有着较小的程序体积
  • 实现进程之间的资源共享(避免重复拷贝)

缺点:

  • 依赖动态库,不能独立运行
  • 动态库依赖版本问题严重

3)静态、动态编译对比

前面我们编写的应用程序大量用到了标准库函数,系统默认采用动态链接的方式进行编译程序,若想采用静态编译,加入-static参数。

以下是分别采用动态编译、静态编译时文件对比:

测试程序(test.c)如下:

#include <stdio.h>


int main(void)

{

    printf("hello world\n");


    return 0;

}
           

编译:

[email protected]:~/test$ gcc test.c -o test_share

[email protected]:~/test$ gcc -static test.c -o test_static

结果对比:

链接器链接类型(静态/动态)

继续阅读