库的使用和编译

文章介绍了GCC编译器的工作流程,包括预处理、编译、汇编和链接四个阶段,并详细列出了gcc命令的不同选项,如-E、-S、-c和优化选项-o。此外,文章还阐述了库的两类——静态库和动态库,讨论了它们的加载时机、优缺点及创建方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、嵌入式编译器

在认识库之前,我们要先了解gcc编译器,它是嵌入式编译器的一种

gcc命令的使用格式:gcc 【选项】 【文件名】 【选项】 【文件名】

gcc编译的过程,分为四个阶段:

  1. 预处理:将头文件进行展开,同时对宏定义进行转换
  2. 编译:进行语法,词法,语义分析即检查输入语句是否有错误,而后将语言转换为汇编语言。
  3. 汇编:将汇编语言译为CPU可识别的二进制文件。
  4. 链接:把程序中所以的目标文件和所需库文件链接到一起,最终生成一个可直接运行的文件,称为可执行文件。

总体选项:

-E 对源文件进行预处理,生成*.i文件

-S 对源文件进行编译,生成*.s文件

-c 对源文件进行编译或汇编,生成*.o文件

-o file 输出目标文件

-v 显示编译阶段的命令

警告选项:

-W 屏蔽所以的警告类型

-Wall:显示所以的警告类型

调试选项:

-g  产生调试信息

优化选项:

-o1:对目标文件进的性能进行优化

-o2:在-o1的基础上进行进一步优化,提高目标文件运行性能

-o3:在-o2的基础上进行进一步优化,支持函数集成优化

-o0:不进行优化

二、库的简介

从逻辑功能来看,程序的主体是由一系列函数组成的,所以编写程序的主要工作之一就是实现函数。

库一共分为两种,分别是静态库和动态库

静态库:在编译阶段加载

动态库:在执行阶段加载

  1. 使用静态库编译出的文件大小>动态库编译的文件
  2. 使用静态库编译出的文件执行速度>使用动态库文件的执行速度(动态库有一个调用的过程,所以会更慢)
  3. 动态库更方便更新升级,因为当需要升级时动态库只需要更改动态库里的文件,而静态库需要先删除,之后重新更改静态库,然后再编入程序才能升级成功
  4. 程序的部署静态库要优于动态库 (调用更方便)
  5. 库文件的存放路径(/lib)
  • 动态库的建立
  1. gcc -shared(做动态库的选项) *.c  -o  *.so(.so是动态库的后缀)
  2. gcc  main.c  ./*.so  -o  main  (将动态库编入main文件中,其实总体看也就是将*.c文件编入main.c文件中)
  • 静态库的建立

1、gcc  -c  *.c  -o  *.o(编写静态库需要先将文件转换为二进制文件即.o文件)

2、ar  rcs  lib*.a  *.o   (rc:表示创建 s:表示更新 lib为生成静态库所需的文件前缀 .a为文件后缀)

3、gcc  main.c  -o  main  -L.  -l*  (-L.为指定加载的库的路径,-l*指定加载哪个静态库,-l后面加的是静态库名。)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值