静态库和动态库

在lunux环境下。

一、gcc工作流程

*.c:原始文件,这样的文件是我们直接编写修改的文件,包含了原始代码。通常包含头文件部分、宏定义、函数声明和定义等。

*.i:gcc -E。经过预处理器处理后得到的C文件。处理过程是:将头文件展开,替换宏和去掉注释。

*.s:gcc -S。经过编译器处理后得到的汇编文件。作用是将C程序代码转换为汇编程序。

*.o:gcc -c。经汇编器处理后得到的二进制文件。

a.out: gcc。经链接器将函数库中相应代码组合到目标文件中。可以使用-o 指定输出文件的名字。

需要注意的是,要得到任何需要的中间文件或最终执行文件,不需要按步骤挨个执行,只需要直接执行对应的命令即可。

本篇gcc用到的参数:

-c产生二进制文件
-I(大写i)+目录指定头文件目录
-o+文件名称指定执行文件名称
-E生成预处理文件
-g包含调试信息

二、静态库与动态库

在项目开放过程中,经常需要复用优秀代码,或为他人提供代码但不想被看到源代码。那么,这时我们需要构建函数库,并将函数库和头文件一起发布。函数库通常分为:静态可和动态库。

1、静态库

静态库,是在链接时打包到执行文件中,直接发布可执行程序。其优点是寻址方便,速度快;缺点是,代码库多次使用后,会导致冗余,使代码文件变大。

静态库文件命名规则:lib+库的名字+.a

构建过程:

①将要打包的*.c文件处理为二进制文件:

gcc -c +原始文件  -l  +头文件目录

②创建静态库:

ar rcs lib+库的名字+.a *.o

nm 库文件   #查看库的内容

③使用静态库:

gcc -o 可执行文件名 原文件 -L 静态库路径 -l 静态库名 -I 头文件目录
或
gcc -o 可执行文件 原文件 -I 头文件目录 libxxx.a

2、动态库

动态库,是在编译时简单引用,在执行时才载入内存,通过此方法,内存中可以只有一份动态库的副本而供很多应用程序使用,因此又叫做共享库。优点是节省内存,易于更新(函数库更新,不需要对整个文件更新);缺点是延时绑定,速度慢。我么可以使用ldd命令查看程序所需要的动态库。

动态库文件命名规则:lib+动态库名字+.so

构建过程:

①生成与位置无关的.o文件:

gcc -fPIC -c *.c -I 头文件目录

②创建动态库:

gcc -shared -o lib+动态库名称.so *.o

③使用动态库:

gcc -o 可执行文件名 原文件 -L 动态库目录 -l 动态库名称 -I 头文件目录
或
gcc -o 可执行文件名 原文件 -I 头文件目录 libxxx.so

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值