GDB调试笔记

本文详细介绍了Linux下GCC编译器的工作流程,包括预处理、编译、汇编和链接四个阶段。阐述了如何使用gcc命令及各种参数,如-E、-S、-c、-o等,来控制编译过程,并解释了优化级别-O0至-O3的作用。

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

一、Linux程序gcc编译步骤:
Gcc编译过程主要的4个阶段:

l 预处理阶段,完成宏定义和include文件展开等工作;(.i)

l 根据编译参数进行不同程度的优化,编译成汇编代码(.s.S)

l 用汇编器把汇编代码进一步生成目标代码(.o)

l 用连接器把生成的目标代码和系统或用户提供的库连接起来,生成可执行文件

格式:

l gcc -E test.c//预处理阶段

l Gcc -S test.c//编译阶段

l Gcc -c test.c//汇编阶段

l Gcc -o test test.c//链接阶段

-c
只激活预处理,编译,和汇编,也就是他只把程序做成obj文件

例子用法:
将生成 .o 的 obj 文件

gcc -c hello.c

-S

只激活预处理和编译,就是指把文件编译成为汇编代码

例子用法:
将生成 .s 的汇编代码,你可以用文本编辑器察看

gcc -S hello.c

-E

只激活预处理,这个不生成文件, 你需要把它重定向到一个输出文件里面

例子用法:

gcc -E hello.c > pianoapan.txt 
gcc -E hello.c | more

-o

制定目标名称, 默认的时候, gcc 编译出来的文件是 a.out, 很难听, 如果你和我有同感,改掉它, 哈哈

例子用法:

gcc -o hello.exe hello.c (,windows用习惯了) 
  gcc -o hello.asm -S hello.c

-Ldir

制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然编译器将只在标准库的目录找。这个dir就是目录的名称

-O0 、-O1 、-O2 、-O3

编译器的优化选项的 4 个级别,-O0 表示没有优化, -O1 为默认值,-O3 优化级别最高

-g

只是编译器,在编译的时候,产生调试信息

-Ldir

制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然编译器将只在标准库的目录找。这个dir就是目录的名称。

-O0 、-O1 、-O2 、-O3

编译器的优化选项的 4 个级别,-O0 表示没有优化, -O1 为默认值,-O3 优化级别最高

-ggdb

此选项将尽可能的生成 gdb 的可以使用的调试信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值