[Liuux]Linux_IO_note

本文介绍了条件编译的语法,如何屏蔽代码段。详细讲解了库的命名规范,包括静态库和动态库的特性、制作与链接过程。在Linux系统中,.a文件用于静态库,.so文件用于动态库,制作静态库使用ar工具,而动态库则需要-fPIC编译选项和-shared链接器选项。
摘要由CSDN通过智能技术生成

1. 条件编译

#ifdef 宏名
	代码段
#endif

编译时,使用命令gcc xxx.c -D 宏名可以执行该段代码

2. 屏蔽代码

#if 0
	想要屏蔽的代码
#endif

当想要屏蔽某段代码时,使用上述方法屏蔽代码

3. 库

3.1 库的命名规范

  • 静态库:lib[库名].a
  • 动态库:lib[库名].so

3.2 静态库

3.2.1 静态库的介绍

  • 静态库:静态库是编译时链接的库,一般在Linux下,以".a"为文件后缀,在Windows下,静态库以".lib"为后缀

3.2.2 静态库的制作与链接

  • 制作

    1. 编写代码

    2. 将源文件(.c文件)编译成目标文件(.o文件)

      gcc -c mysort.c MYSORT.o

    3. 使用ar工具将目标文件(.o文件)打包成静态库文件(.a文件)

      ar -crv libmysort.a MYSORT.o

      生成静态库文件libmysort.a

  • 链接

    gcc xxx.c -L+库所在路径 -l库名

    例如 gcc 1.c -L…/ -l2:将1.c与在上级目录的库2链接

3.3 动态库

3.3.1 动态库的介绍

  • 动态库:动态库也叫共享库,是运行时链接的库,一般在Linux下,以".so"为文件后缀,在Windows下,动态库以".dll"为后缀

3.3.2 动态库的制作与链接

  • 制作

    1. 编写代码

    2. 将源文件(.c文件)编译成目标文件(.o文件),此时要加上编译器选项-fPIC(该选项的作用是创建与地址无关的编译程序)

      gcc -fPIC -c mysort.c

    3. 生成动态库文件(.so),此时要加上链接器选项-shared(该选项的作用是生成动态链接库)

      gcc -shared -o libmysort.so mysort.o

      上述两部命令可以合为一个

      gcc -shared -fPIC -c mysort.c -o libmysort.so

  • 链接

    gcc xxx.c -L+库所在路径 -l库名

    例如 gcc 1.c -L…/ -l2:将1.c与在上级目录的库2链接

    动态库文件默认与环境变量中的文件链接,所以需将当前路径写入环境变量,也可将动态库放在/usr/lib目录之下

3.4 静态库与动态库的区别

区别点静态库动态库
链接阶段编译时链接运行时链接
文件后缀.a/.lib.so/.dll
共享性
可移植性需要静态编译,操作方便需要反复交叉编译。配置路径,操作麻烦
可执行文件大小生成的可执行文件较大并没有直接编译到可执行文件。所以生成的可执行文件较小
制作过程不同ar -crv libxxx.a xxx.ogcc -shared -fPIC -c xxx.c -o libxxx.so
使用场景不要求共享,排除环境变量的干扰,可执行文件不大,软件版本相对稳定,很少升级有共享性要求,软件版本升级频繁,有远程部署和升级需求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值