Linux 内核入门学习笔记(二) Linux开发工具链简介

本文详细介绍了Linux开发工具链,包括gcc的使用、c程序的编译过程、预处理、汇编、链接等步骤。此外,还讲解了GNU binutils中的ar、nm、objcopy、objdump、readelf等工具的使用,以及gdb调试器和GNU make的规则和变量。文章最后探讨了链接器ld的功能和链接描述文件的作用。
摘要由CSDN通过智能技术生成

 

第二课时: Linux开发工具链简介

1. gcc使用-v选项,可以看到许多被隐藏的信息

gcc -o test test.c -v

2. c程序编译过程 预处理->编译成汇编代码->汇编成目标代码->链接

3. 只进行预处理 -E参数

gcc -E -o test.cpp test.c

4. 比较两个文件的前后差异 wc 命令

wc test.c test.cpp

5. -x 根据指定的步骤进行工作,预处理文件到汇编代码cpp-output,生成汇编代码后停止工作-S

gcc -x cpp-output -S -o test.s test.cpp

直接编译得到汇编代码

gcc -S test.c

6. 汇编代码->目标代码 gcc -x assembler -c gcctest.s

直接编译成目标代码 gcc -c gcctest.c

使用汇编器生成目标代码as -o gcctest.o gcctest.s

7.目标代码->执行代码gcc -o gcctest gcctest.o

直接生成执行代码gcc -o gcctest gcctest.c

8.-Wall:打开所有的警告信息

9.优化编译选项:-O0缺省情况,不优化-O1 -O2 -O3等等

gcc -01 -o m1 test.c

10. 使用time命令统计程序的运行 time ./m1

 

GNU binutils 工具简介

1. ar(建立归档文件(库文件))

(1)假设有两个源程序add.c minus.c,包含两个函数文件

将这两个源程序编译成目标文件

gcc -c add.c minus.c

(2)生成库文件,然后复制到/usr/lib目录下

ar rv libtest.a add.o minus.o

sudo cp libtest.a /usr/lib/

(3) 在其他源代码文件中使用了之前库文件中的函数,在链接时用"-l<name>"指明库文件

gcc -o test test.c -llibtest

/***********这里课件上是-ltest 不知道是否正确**************/

2. nm列出目标文件中的符号

A:符号的值是绝对值,并且不会被将来的链接所改变

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值