【C语言学习记录20】链接过程

问题

工程中的每个C语言源文件被编译后生产目标文件,这些文件如何生成最终的可执行程序?

链接器的意义:

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

静态链接

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

Linux静态库下的创建和使用:

1)编译静态库源码:gcc –c lib.c –o lib.o   (目标文件)

2)生成静态库文件:ar –q lib.a lib.o     (打包)

3)使用静态库编译:gcc main.c lib.a –o main.out (lib.a相当于一个档案包,叫做静态库)

动态链接(运行时再到动态库中查找内容)

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

2)库的内容不会进入可执行程序当中。

sub1和sub2是动态库暴露出来告诉编译器所能提供的内容(有用的部分)

Linux动态库下的创建和使用:

1)编译动态库源码:gcc –shared dlib.c –o dlib.so   (目标文件)

2)使用动态库编译:gcc main.c –ldl –o main.out

3)关键系统调用:

       a> dlopen:打开动态库文件

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

       c> dlclose:关闭动态库文件

 

小结:

1)链接是指将目标文件最终链接为可执行程序;

2)根据链接方式的不同,链接过程可以分为:

       a> 静态链接:目标文件直接链接进入可执行程序;(适用于小程序)

       b> 动态链接:在程序启动后才动态加载目标文件;(部分更新应用程序)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值