GCC编译器

GCC编译器

GCC 编译器在我们 Ubuntu 的时候就已经默认安装好了,但默认是x86架构的。

GCC编译出现问题

执行gcc main.c -o main 类似命令时,报错,未满足依赖关系。

多半是镜像源跟你的ubuntu系统版本不匹配导致的。

通过 lsb_release -a 查看Ubuntu的版本号,

img

修改源—sudo vim /etc/apt/sources.list

在该文件最后添加下面内容,以Ubuntu20.04为例。

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
 
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
 
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
 
# deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
 
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

接下来,执行下面两条命令:

sudo apt-get update
sudo apt-get upgrade

最后执行命令:

sudo apt-get install libc6-dev

然后编译时 gcc main.c -o main,就不会出错了。

注意:
不要误以为gcc只能用来编译C文件,这是不对的。gcc也可以编译C++文件,只是gcc不能自动联接C++程序使用的库,即链接过程我们不能用gcc。而g++实际上在编译C++文件时也是使用gcc编译器,在链接时才使用g++。

交叉编译器

1、它肯定是一个 GCC 编译器。

2、这个 GCC 编译器是运行在 X86 架构的 PC 上的。

3、这个 GCC 编译器是编译 ARM 架构代码的,也就是编译出来的可执行文件是在 ARM 芯片上运行的。

I.MX6ULL 交叉编译器:arm-linux-gnueabihf-

arm架构,linux环境,gnueabihf表示嵌入式二进制接口

查看版本号

gcc -v   // 查看GCC编译器的版本号

最下面“gcc version 11.4.0”说明本机的 GCC 编译器版本为 11.4.0的。

“Target: x86_64-linux-gnu”一行,这说明 Ubuntu 自带的 GCC 编译器是针对 X86 架构的,因此只能编译在 X86 架构 CPU 上运行的程序。如果想要编译在 ARM上运行的程序就需要针对 ARM 的 GCC 编译器,也就是交叉编译器

编译文件

gcc main.c      // 编译,编译完成以后会生成一个 a.out 文件:可执行文件(gcc编译器自动命名)
gcc main.c -o main  //-o:指定编译生成的可执行文件的名字为main
./main         // 执行代码

gcc命令

gcc [选项] [文件名字]

image-20230807203534820

编译流程

  • 预处理

    展开所有的头文件、替换程序中的宏、解析条件编译并添加到文件中

  • 编译

    将经过预编译处理的代码编译成汇编代码,也就是我们常说的程序编译

  • 汇编

    将汇编语言文件编译成二进制目标文件

  • 链接

    将汇编出来的多个二进制目标文件链接在一起,形成最终的可执行文件,链接的时候还会涉及到静态库和动态库等问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鬼才的凝视

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

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

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

打赏作者

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

抵扣说明:

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

余额充值