linux g++ 重要编译参数

本文介绍了C++编译时的关键选项,如-g用于生成调试信息,-O[n]进行不同级别的优化,-l和-L指定库文件,-Wall显示警告,-std=c++11设置编译标准,以及常用的GDB调试命令。详细讲解了如何使用这些选项来编译带调试信息的可执行文件并优化性能。
摘要由CSDN通过智能技术生成
  • -g     编译带调试信息的可执行文件
1# -g 选项告诉 GCC 产生能被 GNU 调试器GDB使用的调试信息,以调试程序。
2
3# 产生带调试信息的可执行文件test
4g++ -g test.cpp
  • -O[n]    优化源代码
 1## 所谓优化,例如省略掉代码中从未使用过的变量、直接将常量表达式用结果值代替等等,这些操作会缩减目标文件所包含的代码量,提高最终生成的可执行文件的运行效率。
 2
 3# -O 选项告诉 g++ 对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。 -O2 选项告诉 g++ 产生尽可能小和尽可能快的代码。 如-O2,-O3,-On(n 常为0–3)
 4# -O 同时减小代码的长度和执行时间,其效果等价于-O1
 5# -O0 表示不做优化
 6# -O1 为默认优化
 7# -O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
 8# -O3 则包括循环展开和其他一些与处理特性相关的优化工作。
 9# 选项将使编译的速度比使用 -O 时慢, 但通常产生的代码执行速度会更快。
10
11# 使用 -O2优化源代码,并输出可执行文件
12g++ -O2 test.cpp
  • -l  和  -L     指定库文件  |  指定库文件路径
 1# -l参数(小写)就是用来指定程序要链接的库,-l参数紧接着就是库名
 2# 在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接
 3
 4# 链接glog库
 5g++ -lglog test.cpp
 6
 7# 如果库文件没放在上面三个目录里,需要使用-L参数(大写)指定库文件所在目录
 8# -L参数跟着的是库文件所在的目录名
 9
10# 链接mytest库,libmytest.so在/home/bing/mytestlibfolder目录下
11g++ -L/home/bing/mytestlibfolder -lmytest test.cpp
  • -Wall    打印警告信息
1# 打印出gcc提供的警告信息
2g++ -Wall test.cpp
  • -w    关闭警告信息
1# 关闭所有警告信息
2g++ -w test.cpp
  • -std=c++11    设置编译标准
1# 使用 c++11 标准编译 test.cpp
2g++ -std=c++11 test.cpp
  • -o     指定输出文件名
1# 指定即将产生的文件名
2
3# 指定输出可执行文件名为test
4g++ test.cpp -o test
  • -D     定义宏
1# 在使用gcc/g++编译的时候定义宏
2
3# 常用场景:
4# -DDEBUG 定义DEBUG宏,可能文件中有DEBUG宏部分的相关信息,用个DDEBUG来选择开启或关闭DEBUG

常用调试命令参数

 1## 以下命令后括号内为命令的简化使用,比如run(r),直接输入命令 r 就代表命令run
 2
 3$(gdb)help(h)        # 查看命令帮助,具体命令查询在gdb中输入help + 命令 
 4
 5$(gdb)run(r)         # 重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件)
 6
 7$(gdb)start          # 单步执行,运行程序,停在第一行执行语句
 8
 9$(gdb)list(l)        # 查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数)
10
11$(gdb)set            # 设置变量的值
12
13$(gdb)next(n)        # 单步调试(逐过程,函数直接执行)
14
15$(gdb)step(s)        # 单步调试(逐语句:跳入自定义函数内部执行)
16
17$(gdb)backtrace(bt)  # 查看函数的调用的栈帧和层级关系
18
19$(gdb)frame(f)       # 切换函数的栈帧
20
21$(gdb)info(i)        # 查看函数内部局部变量的数值
22
23$(gdb)finish         # 结束当前函数,返回到函数调用点
24
25$(gdb)continue(c)    # 继续运行
26
27$(gdb)print(p)       # 打印值及地址
28
29$(gdb)quit(q)        # 退出gdb
30
31$(gdb)break+num(b)                 # 在第num行设置断点
32
33$(gdb)info breakpoints             # 查看当前设置的所有断点
34
35$(gdb)delete breakpoints num(d)    # 删除第num个断点
36
37$(gdb)display                      # 追踪查看具体变量值
38
39$(gdb)undisplay                    # 取消追踪观察变量
40
41$(gdb)watch                        # 被设置观察点的变量发生修改时,打印显示
42
43$(gdb)i watch                      # 显示观察点
44
45$(gdb)enable breakpoints           # 启用断点
46
47$(gdb)disable breakpoints          # 禁用断点
48
49$(gdb)x                            # 查看内存x/20xw 显示20个单元,16进制,4字节每单元
50
51$(gdb)run argv[1] argv[2]          # 调试时命令行传参
52
53$(gdb)set follow-fork-mode child   # Makefile项目管理:选择跟踪父子进程(fork())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zyb-小波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值