GCC学习手册(一)

GCC编译器

注:在实际开发中,使用gcc指令编译C程序,使用g++指令编译C++程序。
例:g++ test.cpp -o test //下面对编译过程进行详解

一、编译过程:

1. 预处理 // .i文件
# -E 选项使编译器仅对输入文件进行预处理
g++ -E test.cpp -o test.i
2. 编译 //.s文件
# -S 编译选项使g++为C++代码产生汇编语言文件后停止编译
g++ -S test.i -o test.s
3. 汇编 //.o文件
# -C 选项使g++仅把源代码编译为机器语言的目标代码
g++ -c test.s -o test.o
4. 链接 //bin文件
# -O 选项为将产生的可执行文件指定文件名
g++ test.o -o test 

二、g++常用编译参数

1. -g 编译带调试信息的可执行文件
# -g 使GCC产生能被GNU调试器使用的调试信息
g++ -g test.cpp -o test
2. -O[n] 优化源码
# -O1 默认有优化,减小代码的长度和执行时间
# -O2 在O1基础上添加额外的调整,如指令调整(常用)
# -O3 包括循环展开和其他与处理特性相关的优化
g++ test.cpp -O2 -o test
3. -l 指定库文件 & -L 制定库文件路径
# -l用来指定程序要连接的库
# 在 /lib 和 /usr/lib 和 /usr/local/lib 中的库文件直接用-l即可链接
g++ -lglog test.cpp //链接glog库
# 库文件不在以上目录中需要使用-L制定所在目录
# 连接lmytest库,lmytest.so 在/home/bing/mytestfolder 目录下
g++ -L/home/bing/mytestfolder -lmytest test.cpp //链接lmytest库
4. -I 指定头文件搜索目录
# /usr/include 目录通常无需指定,当头文件不在此路径下时才使用-I参数,例如头文件在/myinclude路径
g++ -I/myinclude test.cpp
5. -Wall 打印警告信息 & -w 关闭警告信息
# g++ -Wall test.cpp
# g++ -w test.cpp
6. -std=c++11 设置编译标准
# 使用 c++11 编译
g++ -std=c++11 test.cpp
7. -o 指定输出文件名
# 默认生成 a.out,指定后为test
g++ test.cpp -o test
8. -D 定义宏
# 常用场景 -DDEBUG宏
# c语言示例代码如下:

int main()
{
	#ifndef DEBUG
	printf("DEBUG LOG\n");
	#endif
	printf("in\n");
}

# 编译:gcc -DDEBUG main.cpp

GDB调试器

注:vscode通过调用GDB实现 C/C++ 的调试,在编译程序时需要加 -g 才能使用 GDB 调试 gcc -g main.c -o main

一、常用调试命令参数

调试开始执行 gdb filename 进入调试程序,filename为可执行文件名
### 括号内为简化使用 ###
help(h) #查看命令帮助
run(r) #重新开始运行文件
start #单步执行运行程序,停在第一行执行语句
list(l) #查看源代码(list-n 从第n行开始查看代码,list+函数名 查看具体函数)
next(n) #单步调试(按过程,函数直接执行)
step(s) #单步调试(按语句,进入函数内部)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值