系列文章目录
·【Linux下C++开发】第二篇·开发环境搭建及gcc编译器
·【Linux下C++开发】第三篇·使用VSCode进行C++开发
目录
一、安装GCC/GDB、CMake
gcc是编译器,gdb是调试器,使用前需要先进行安装:
$ sudo apt update
$ sudo apt install build-essential gdb
$ sudo apt install cmake
二、GCC编译器
使用gcc指令编译C代码;使用g++指令编译C++代码
1.编译过程
- 预处理(Pre-Processing) - .i文件
- 编译(Compiling) - .s文件
- 汇编(Assembling) - .o文件
- 链接(Linking)- bin文件
$ g++ -E test.cpp -o test.i #-E表示仅对输入文件进行预处理
$ g++ -s test.i -o test.s #-s表示g++在为c++代码产生了汇编语言文件后停止编译
$ g++ -c test.s -o test.o #-c表示g++仅把源代码编译为机器语言的目标代码
$ g++ test.o -o test #产生可执行文件test
但是在平时的编译过程中,我们只需要下面这一条代码即可编译生成一个可执行文件:
$ g++ test.cpp -o test
2.g++重要编译参数
-g | 产生带调试信息的可执行文件,可被GDB使用 |
-O[n] | 优化源代码,一般用-O2 |
-l 和 -L | 指定库文件/指定库文件路径 |
-I | 指定头文件搜索目录 |
-Wall | 打印警告信息 |
-w | 关闭警告信息 |
-std=c++11 | 设置编译标准 |
-o | 指定输出文件名 |
-D | 定义宏 |
3.生成库文件并编译
(1)生成静态库
$ cd src #进入到src源代码文件夹中
$ g++ libtest.cpp -c -I../include #汇编,生成.o文件
$ ar rs libtest.a libtest.o #生成静态库libtest.a
$ cd ..
$ g++ main.cpp -Iinclude -Lsrc -llibtest -o test #运行可执行文件
(2)生成共享库
$ cd src
$ g++ libtest.cpp -I../include -fPIC -shared -o libtest.so #创建共享库
$ cd ..
g++ main.cpp -Iinclude -Lsrc -llibtest -o test #运行可执行文件
三、GDB调试器
1.常用调试命令参数
调试开始:gdb [exe]
h | 查看命令帮助 |
r | 重新开始运行文件 |
start | 单步执行 |
l | 查看源代码 |
set | 设置变量的值 |
n | 单步调试(逐过程,函数直接执行) |
s | 单步调试(逐语句,跳到函数内执行) |
finish | 结束当前函数,返回到函数调用点 |
i | 查看函数内部变量的数值 |
b | 在第num行设置断点 |
d | 删除断点 |
q | 退出gdb |
输出某个变量的值 |
2.命令行调试
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
int sum;
for(int i=0;i<100;i++)
{
sum += i;
}
cout << "sum is: " << sum << endl;
return 0;
}
对以上这段代码进行gdm调试
$ g++ -g test.cpp -o test
$ gdb test #调试开始
$ b 10 #在10行设置断点
$ r #运行程序
$ p sum #打印输出sum的值
$ q #退出gdb调试