Ubuntu下对gcc、g++以及交叉编译器工具的理解

@前言

由于项目需求,需要对C、C++代码进行编译以生成可执行文件,过程中接触学习了gcc、g++以及交叉编译器的下载1与使用方法,根据我的理解,现做以下总结。才疏学浅,如有问题,请随时留言以纠正!

@gcc、g++工具是干什么的?

简单的来说,gcc、g++就是将你的C、C++等代码生成可执行的文件(可供机器运行的机器码),大多数情况下gcc用于编译C代码,g++用于编译C++代码,但并不局限这样,gcc也可以编译C++代码,g++也可以编译C代码,具体gcc与g++区别可见参考链接2

@X86架构Ubuntu18.04下的gcc与g++工具

X86架构Ubuntu18.04是在Win10电脑虚拟机中运行。	

1、gcc工具的安装与使用:

安装gcc编译工具

max@ubuntu:~/Documents$  sudo apt-get install gcc

创建.c文件

max@ubuntu:~/Documents$  touch main.c

编辑 main.c

max@ubuntu:~/Documents$  gedit main.c

在 main.c 文件中输入一下代码:

#include <stdio.h>
int main()
{
	printf("Hello World!\n");
	return 0;
}

使用gcc编译main.c文件

max@ubuntu:~/Documents$  gcc main.c

运行生成的a.out可执行文件(当前目录下,默认情况下生成的文件名)

max@ubuntu:~/Documents$  ./a.out

输出:

Hello World!

示意图

2、g++工具的安装与使用:

安装gcc编译工具

max@ubuntu:~/Documents$  sudo apt-get install g++

创建.cpp文件

max@ubuntu:~/Documents$  touch main.cpp

编辑 main.cpp

max@ubuntu:~/Documents$  gedit main.cpp

在 main.cpp 文件中输入一下代码:

#include <stdio.h>
int main()
{
	printf("Hello World!\n");
	return 0;
}

使用g++编译main.cpp文件

max@ubuntu:~/Documents$  g++ main.cpp

运行生成的a.out可执行文件(当前目录下,默认情况下生成的文件名)

max@ubuntu:~/Documents$  ./a.out

输出:

Hello World!

示意图

@ARM架构Ubuntu18.04下的gcc与g++工具

Arm架构Ubuntu18.04是在Arm芯片的开发板中运行。

1、gcc工具的安装与使用:

安装gcc编译工具

root@ubuntu:~/Documents$  sudo apt-get install gcc

创建编辑.c文件和X86平台一致…
结果如下:

Hello World!

示意图

2、g++工具的安装与使用:

安装g++编译工具

root@ubuntu:~/Documents$  sudo apt-get install g++

创建编辑.cpp文件和X86平台一致…
结果如下:

Hello World!

示意图

@交叉编译器实现跨平台编译C与C++代码

交叉编译器的功能,就是在不同的架构平台下实现代码的编译工作,举个例子:目前我们在X86架构Ubuntu下写好了C或C++代码,想在X86架构下的Ubuntu系统中直接编译出ARM架构Ubuntu中可运行的可执行文件,那么就需要在我们X86平台中安装交叉编译器,使用交叉编译器对代码进行编译。下面围绕这个例子做个展示。

arm-linux-gcc / arm-linux-g++ 交叉编译器就是在x86架构的Ubuntu(linux)下实现代码ARM架构可执行文件的编译。

1、arm-linux-gcc交叉编译器的安装与使用

安装arm-linux-gcc:

max@ubuntu:~/Documents$  sudo apt-get install gcc-arm-linux-gnueabihf

使用相同的main.c文件,使用arm-linux-gcc进行编译,编译后的可执行文件名字为 “1”

max@ubuntu:~/Documents$  arm-linux-gnueabihf-gcc -o 1 main.c

运行执行后的可执行文件

max@ubuntu:~/Documents$  ./1

得到报错!

bash: ./1: cannot execute binary file: Exec format error

这是因为咱们编辑了ARM架构Ubuntu(linux)下可运行的文件,在X86平台并不能运行。
将1文件拷贝至ARM板中,运行发现:

Hello World!

2、arm-linux-g++交叉编译器的安装与使用

安装arm-linux-g++:

max@ubuntu:~/Documents$  sudo apt-get install g++-arm-linux-gnueabihf

使用相同的main.cpp文件,使用arm-linux-g++进行编译,编译后的可执行文件名字为 “2”

max@ubuntu:~/Documents$  arm-linux-gnueabihf-g++ -o 2 main.cpp

运行执行后的可执行文件

max@ubuntu:~/Documents$  ./2

得到报错!

bash: ./2: cannot execute binary file: Exec format error

这是因为咱们编辑了ARM架构Ubuntu(linux)下可运行的文件,在X86平台并不能运行。
将2文件拷贝至ARM板中,运行发现:

Hello World!

3、交叉编译器的运行参考图

X86架构平台下的运行界面:
在这里插入图片描述
ARM架构平台下的运行界面:
在这里插入图片描述

@参考文档

才疏学浅,如有问题,请随时留言以纠正!


  1. Ubuntu 18.04安装arm-linux-gcc交叉编译器 ↩︎

  2. gcc和g++是什么,有什么区别? ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值