Linux下C++编程入门(二)GCC调试器与GDB调试器

本文详细介绍了Linux环境下使用GCC编译器进行C++编程的过程,包括预处理、编译、汇编和链接四个阶段,以及GCC的重要参数如-g用于添加调试信息,-O[n]进行代码优化。此外,还讲解了如何指定库文件(-l,-L)和头文件(-I)路径。在GDB调试器方面,提到了其在调试程序中的基本命令参数需求。
摘要由CSDN通过智能技术生成

Linux下C++编程(二)GCC编译器与GDB调试器

1. GCC编译器

1.1 编译过程

  1. 预处理-Pre-Processing
#-E 选项指示编译器仅对文件进行预处理
g++ -E test.cpp -o test.i    // .i文件
  1. 编译-Compiling //.s文件
#  -S  编译选项告诉 g++ 在为C++代码产生了汇编文件后停止编译
#  g++产生的汇编语言文件的缺醒扩展名是 .s
g++ -S test.i -o test.s
  1. 汇编-Assembling //.o文件
# -c 选项告诉g++ 仅把源代码编译为机器语言的目标代码
# 缺醒时 g++ 建立的目标代码文件有一个.o的扩展名
g++ -c test.s -o test.o
  1. 链接-Linking //bin文件
# -o 编译选项来为将产生的可执行文件用指定的文件名
g++  test.o  -o test

1.2 g++的重要参数

1.-g 编译带调试信息的可执行文件

#产生带调试信息的可执行文件
g++ -g test.cpp -o test

2.-O[n] 优化源代码

-O   #同时减小代码的长度和执行时间,其效果等价于-O1
-O0    #表示不做优化
-O1    #默认优化
-O2    #除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
-O3    #则包括循环展开和其他一些与处理特性相关的优化工作

#选项将使编译的速度比 使用-O时慢, 但通常产生的代码执行速度会更快

#使用-O2 优化源代码,并输出可执行文件速度会更快
g++ -O2 test.cpp
  1. -l和**-L**指定文件 | 指定库文件路径
# -l参数(小写)就是用来指定程序要链接的库,-l参数紧接着就是库名
#在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接

#链接glog库
g++ -lglog 库
g++ -lglog test.cpp

#如果库文件 没放在上面三个目录里,需要使用-L参数(大写)指定库文件所在目录

#-L参数跟着库文件所在目录
g++ -L/home/filename  -lmytest  test.cpp
  1. -I 指定头文件搜索目录
#/usr/include目录不用指定  其他文件可以借鉴下面例子指定
g++ -I/myinclude test.cpp
  1. -Wall 打印警告信息
#打印出gcc提供的警告信息
g++ -Wall test.cpp
  1. -w 关闭警告信息
#关闭所有警告信息
g++ -w test.cpp
  1. -std=c++11 设置编译标准
g++ -std=c++11 test.cpp
  1. -o 指定输出文件名
#指定即将产生的文件名
g++ test.cpp -o test

9.-D 定义宏

#在使用gcc/g++编译的时候定义宏

#常用场景:
# -DDEBUG  定义DEBUG宏,可能文件中有DEBUG宏部分的相关信息,勇哥DDEBUG来选择开启或关闭DEBUG

// -Dname定义宏name,默认定义内容为字符串"1"

#include<stdio.h>
int main()
{
	#ifdef DEBUG      //如果开启宏那么执行这里
	    printf(" DEBUG LOG\n");
	#endif    //如果没有执行那么执行这里
	   printf("in\n");
	return 0;
}

//1. 在编译的时候,使用g++  -DDEBUG mian.cpp
//2. 那么 printf(" DEBUG LOG\n");代码将被执行
  1. man gcc 查看gcc英文操作手册手册
man  gcc

1.3 g++命令行编译

1.直接编译,并运行

#将main.cpp    scr/swap.cpp  编译为可执行文件
g++ main.cpp src/swap.cpp  -Iinclude    //-Iinclude指定编译器包含的自定义的头文件的路径

#运行a.out
./a.out

2.生成库文件并编译
链接静态库生成可执行文件:

#进入src目录下
cd src 

#汇编,生成Swap.o文件
g++ swap.cpp -c -I../include

#生成静态库libswap.a
ar rs libswap.a  swap.o

#返回到上一级目录
cd ..

#链接,生成可执行文件
g++ mian.cpp -I../include -lswap -Lsrc -o static_mian

#执行可执行文件
./static_main

链接动态库生成可执行文件

#进入src目录
cd src

#生成动态库 libSwap.so
g++ swap.cpp -I../incude -fPIC -shared -o libswap.so      #-fPIC表示与路径无关

##上面ing零等价于以下两行命令
#gcc swap.cpp -I../include -c -fPIC
#gcc -shared -o libswap.so swap.o

#返回上级目录
cd ..

#链接生成可执行文件 sharemain
g++ main.cpp -Iinclude -Lsrc -lswap -o sharemain

#执行生成的可执行文件sharemain
./sharemain 
  1. 运行可执行文件
    运行可执行文件(链接静态库)
./static_main

运行可执行文件(链接动态库)

LD_LIBRARY_PATH=src ./share_main

2. GDB编译器

2.1常用调试命令参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
提示:编译程序时需要加参数 -g 生成的可执行文件才能被gdb调试,回车键是重复上一步命令。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

有点东西哦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值