【Linux C】第七章 GCC编译器

1. Gcc编译流程:源文件预处理生成.i文件--->.i文件编译为汇编语言生成.s文件----->汇编语言文件经过汇编生成目标文件.o文件------->将各模块目标文件连接生成可执行文件。

2. gcc常用选项

-c 进行预处理、编译、汇编生成.o文件但不进行连接。

-S进行预处理、编译生成汇编文件但不进行汇编。

-E进行预处理、但是不进行汇编。

-o完整进行四步,生成可执行文件。

-I 指定include包含文件的搜索目录。

-g 生成调试信息,用于GDB等调试器调试。

3. 目标文件:可重定位目标文件、可执行目标文件、共享目标文件(.so文件,运行时动态加载)。

4. ELF是linux下最常用的目标文件格式。包括两个组成部分:ELF文件头和目标文件段。ELF文件头包括生成该文件系统的字长及字节序,ELF文件头大小,目标文件类型,目标机的类型。

5. ELF目标文件的段包括:

.txt 代码段,存储二进制机器码。

.rodata 只读数据段,存储复杂常量如字符串。

.data 数据段,存储全局变量和静态变量。

.bss 块存储段,存储未被明确初始化的全局数据。表示加载到内存中时需要预留的空间,但不占用实际的空间。提高磁盘的存储空间利用率。

以上四个段在程序运行时,会被实际加载到内存中。以下为辅助程序进行链接和加载的信息。

.symtab:符号表。 .rel.text:代码段重定位信息(如函数名和标号)。.re.data:数据段需要重定位信息。 .debug:调试信息。 .line:源程序行号映射。 .strtab:字符串表。

6. 程序库包含了一些通用的函数及可执行码的文件。包括静态库(运行前加入执行码)和动态库(程序启动时加入,可多执行程序共享)。

7. 静态库 xxx.a  创建静态库:eg.    ar  rcs  static_lib.a static_lib.o 。 在使用时,后面加上 -l 参数指定静态库或者-L参数指定库文件搜索路径(最好在命令行末尾)。

8. gcc工具链包括ar、as、id、nm、size等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值