【Linux下C++开发】第二篇·开发环境搭建及GCC、GDB使用

系列文章目录

·【Linux下C++开发】第一篇·Linux系统基本操作

·【Linux下C++开发】第二篇·开发环境搭建及gcc编译器

·【Linux下C++开发】第三篇·使用VSCode进行C++开发

·【Linux下C++开发】第四篇·CMake

目录

系列文章目录

一、安装GCC/GDB、CMake

二、GCC编译器

1.编译过程

2.g++重要编译参数


一、安装GCC/GDB、CMake

gcc是编译器,gdb是调试器,使用前需要先进行安装:

$ sudo apt update
$ sudo apt install build-essential gdb
$ sudo apt install cmake

二、GCC编译器

使用gcc指令编译C代码;使用g++指令编译C++代码

1.编译过程

  1. 预处理(Pre-Processing) -  .i文件
  2. 编译(Compiling) -  .s文件
  3. 汇编(Assembling) -  .o文件
  4. 链接(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
print输出某个变量的值

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调试

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值