ubuntu之初识GCC

本文参考 https://blog.csdn.net/qq_42475711/article/details/85224010
https://blog.csdn.net/hotfeeling_zy/article/details/1635609
https://blog.csdn.net/smallerxuan/article/details/81736693

1.GCC 简介

GCC(GNU Compiler Collection)即GNU编译器套件,属于一种编程语言编译器,其原名为GCC(GNU C Compiler)即GNU c语言编译器,虽然缩写一样但是功能上区别很大。GCC的初衷是为GNU操作系统专门编写的一款编译器,原本的GNU是专用于编译C代码,现如今已扩展为可以编译C、C++、Java、Objective-C等多种编程语言的编译器集合了。

2.GCC 和gcc和g++的区别

gcc(GUN C Compiler)是GCC中的c编译器,而g++(GUN C++ Compiler)是GCC中的c++编译器。
  gcc和g++两者都可以编译c和cpp文件,但存在差异。gcc在编译cpp时语法按照c来编译但默认不能链接到c++的库(gcc默认链接c库,g++默认链接c++库)。g++编译.c和.cpp文件都统一按cpp的语法规则来编译。所以一般编译c用gcc,编译c++用g++。
gcc 和 g++ 都可以编译c, c++的程序,但是只有g++可以链接c++的库函数

3.安装GCC

在ubuntu16.04 下安装

sudo apt-get  build-dep  gcc

或者执行下面命令也可

sudo apt-get  install  build-essential  

查看GCC版本

gcc --version  

4.来一个简单的例子

4.1 C语言先出马

  • 新建一个.c格式的文件,在目录下打开终端,输入
touch hello.c

然后在hello.c文件中写上

#include <stdio.h>
int main()
{
   printf("hello world!\n");
   return 0;
}
  • 生成可执行文件
gcc hello.c -o hello

这时候生成了左边这个文件
在这里插入图片描述

  • 启动可执行文件
./hello

效果如下:
在这里插入图片描述

4.2 C++来压轴

  • 新建一个.cpp格式的文件,在目录下打开终端,输入
touch test.cpp

在文件中输入内容:

#include <iostream>

int main()
{
 std::cout<<"hello world!\n";
 return 0;
}
  • 生成可执行文件
g++ test.cpp -o test

在这里插入图片描述

  • 执行可执行文件
./test

效果如下:
在这里插入图片描述

gcc/g++ 编译的四个阶段

gcc/g++在执行编译和链接工作的时候,总共需要4步

1.预处理,生成.i的文件[预处理器cpp]
2.将预处理后的文件转换成汇编代码,文件后缀为.s[编译器egcs]
3.由汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
4.连接目标代码,生成可执行程序[链接器ld]
在这里插入图片描述 1 预处理(Pre-Processing)

在该阶段,对头文件进行真正导入,对宏定义进行展开。可以使用 -E 参数让gcc 编译器在完成预处理阶段后停止下来。

 gcc -E hello.c -o hello.i

2.编译(Compiling)

在编译阶段,gcc编译器会先进行语法检查,在通过检查后就会将源文件编译成汇编文件。用户可以使用 -S 参数让gcc编译器在完成这一过程后停止下来。

 gcc -S hello.i -o hello.s

3.汇编(Assembling)

汇编阶段要进行的工作是将gcc前面过程中生成的汇编文件进行汇编得到二进制目标代码。用户可以使用 -c 参数让编译器在完成汇编后停止下来。

 gcc -c test.s -o test.o

4.连接(Linking)
在者一阶段gcc编译器会将各个二进制模块和动态库、静态库进行链接操作,得到最终的可执行文件。

 gcc test.o -o test
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值