千家信息网

C语言链接的过程是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇"C语言链接的过程是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C语言链接
千家信息网最后更新 2026年11月02日C语言链接的过程是什么

这篇"C语言链接的过程是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C语言链接的过程是什么"文章吧。

一、链接器的意义

连接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接。

二、模块链接

静态链接

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

Linux下静态库的创建和使用

  • 编译静态库源码:gcc -c lib.c -o lib.o

  • 生成静态库文件:ar -q lib.a lib.o

  • 使用静态库编译:gcc main.c lib.a -o main.out

下面看一段静态链接示例的代码:

slib.c

char* name(){    return "Static Lib";} int add(int a, int b){    return a + b;}

Test.c

#include  extern char* name();extern int add(int a, int b); int main(){    printf("Name: %s\n", name());     printf("Result: %d\n", add(2, 3));     return 0; }

输入gcc -c slib.c -o slib.o,编译静态库源码:

输入ar -q slib.a slib.o,生成静态库文件:

输入gcc Test.c slib.a -o Test.out,使用静态库编译,生成 .out 文件:

然后输入 ./Test.out,就可以运行了,如下:

如果把 slib.o,slib.a 文件全部删除,运行 ./Test.out,发现能正常运行,这就是前面说的 .o 文件和 .a 文件完全被链接进了可执行程序里面,可执行程序的运行跟 .o 文件和 .a 文件没有任何关系。

动态链接

  • 可执行程序在运行时才动态加载库进行链接

  • 库的内容不会进入可执行程序当中

Linux下动态库的创建和使用

编译动态库源码:gcc -shared dlib.c -o dlib.so

使用动态库编译:gcc main.c -ldl -o main.out

关键系统调用

  • dlopen:打开动态库文件

  • dlsym:查找动态库中的函数并返回调用地址.

  • dlclose:关闭动态库文件

下面看一个动态链接示例:

dlib.c

char* name(){    return "Dynamic Lib";} int add(int a, int b){    return a + b;}

Demo.c

#include #include  int main(){    void* pdlib = dlopen("./dlib.so", RTLD_LAZY);     char* (*pname)();    int (*padd)(int, int);     if( pdlib != NULL )    {        pname = dlsym(pdlib, "name");        padd = dlsym(pdlib, "add");         if( (pname != NULL) && (padd != NULL) )        {            printf("Name: %s\n", pname());            printf("Result: %d\n", padd(2, 3));        }         dlclose(pdlib);     }     else    {        printf("Cannot open lib ...\n");    }    return 0;}

先输入 gcc -shared dlib.c -o dlib.so,编译动态库源码:

再输入gcc Demo.c -ldl -o Demo.out,使用动态库编译,生成 .out 文件:

然后输入 ./Demo.out,就可以运行了,如下:

如果把 dlib.so 给删了,运行就会报错:

所以dlib.so 这个库文件是在程序的运行阶段被动态加载到内存中去,这就是与静态链接的区别。

以上就是关于"C语言链接的过程是什么"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

链接 动态 静态 编译 运行 内容 文件 输入 程序 库文件 源码 生成 语言 过程 就是 模块 之间 文章 知识 示例 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳恒合互联网络科技有限公司 互联网未来科技 互联网金融科技创新 广州互联网络科技有限公司 左右互联网络科技 科技类的互联网平台 互联网科技公司的市场部门 茂名市互联网科技产业园 宝灵互联网科技有限公司 中国互联网公司排名锤子科技 互联网数据科技专业 滨湖区互联网智能科技产品有哪些 黑科技 体验场景 互联网大会 江苏苏星互联网科技有限公司 皮皮虾互联网科技有限公司 信承诺互联网科技有限公司 西安有哪些互联网高科技企业 容联科技互联网电商 互联网时代高科技布局 互联网 科技节活动 微视频大赛 广州互联网科技公司 无线互联网科技 互联网女皇 腾讯科技 掌上梦互联网科技 盛创互联网科技有限公司 上海宁丞科技互联网 武汉健翔互联网络科技有限公司 卓翼科技产业互联网合作 扫呗互联网科技有限公司 互联网科技职业技能培训学校
0