欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux静态链接

程序员文章站 2022-06-03 08:38:52
...

Linux静态链接简介

什么是静态编译?

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

这样做的优点是编译成功的可执行文件可以独立执行,而不需要再向外部要求读取函数库的内容。

缺点是虽然可执行文件可以独立执行,但因为函数库是直接整合到可执行文件中,因此若函数库升级时,整个可执行文件必须要重新编译才能将新版的函数库整合到程序中。

编译方法

使用gcc选项-static可以禁止使用动态链接库,即使用静态链接的方式。

示例代码:

#include<stdio.h>

int main(){
    printf("hello world.\n");
    return 0;
}

编译命令:

gcc -static -o test test.c

编译出错:cannot find -lc
Linux静态链接

编译此程序需要用到libc库文件,而系统中无法找到libc的静态库文件,需要下载安装:

yum install glibc-static

Linux静态链接
再次编译,成功!
Linux静态链接

使用动态链接和静态链接编译的程序大小对比

使用动态链接:
Linux静态链接
使用静态链接:
Linux静态链接