gcc的基本用法
g++ 与 gcc的关系:
Linux的gcc和g++的区别
用gcc编译C++文件
anyway,还是用g++吧
#include <iostream>
int main(int args, char** argv){
std::cout<<"Hello, world"<<std::endl;
return 0;
}
1. 预处理
g++ -E hello.cc -o hello.iig++ -E hello.cc -o hello.ii
包括去掉开头程序、宏替换、去掉注释
-E 表示预处理完就结束
源代码共五行
预处理完
2. 编译
g++ -S hello.ii
-S 表示停到编译结束。将预处理过程生成的.i后缀的文件转化成汇编文件,里面存储的是相应的汇编代码,这个过程叫做编译。
会生成hello.s
3. 汇编
g++ -c hello.s -o hello.o
将汇编文件中的汇编代码翻译成相应的机器语言,这个过程叫做汇编。.o是GCC生成的目标文件,除非你是做编译器和连接器调试开发的,否则打开这种.o没有任何意义。二进制机器码一般人也读不了。
4. 链接
g++ hello.o -o hello
完成链接这个过程,它通过链接器ld将运行程序的目标文件和库文件链接在一起,生成最后的可执行文件
将上面的过程一气呵成,可以用
g++ hello.cc -o hello
常用属性
-o:指定输出文件的名称
-g:添加gdb调试选项
-Wall:开启编译器几乎所有常用的警告──强烈建议你始终使用该选项。
-c 生成目标文件不链接
- 使用C++ 11
g++ -std=c++11 ***
gdb
启动gdb
gdb <program>
program也就是你的执行文件,一般在当前目录下。
- l:查看源代码
- b:设置断点,包括行号,函数等
- r:运行程序
- c:继续
- bt:查看堆栈
- n:单步跟踪,但是不进入函数
- s:单步跟踪,进入函数
- until:跳出循环
- until+行号:到某行
- finish:运行直到当前函数返回
- q:退出gdb