Ubuntu下对gcc、g++以及交叉编译器工具的理解
- @前言
- @gcc、g++工具是干什么的?
- @X86架构Ubuntu18.04下的gcc与g++工具
- 1、gcc工具的安装与使用:
- 2、g++工具的安装与使用:
- @ARM架构Ubuntu18.04下的gcc与g++工具
- 1、gcc工具的安装与使用:
- 2、g++工具的安装与使用:
- @交叉编译器实现跨平台编译C与C++代码
- 1、arm-linux-gcc交叉编译器的安装与使用
- 2、arm-linux-g++交叉编译器的安装与使用
- 3、交叉编译器的运行参考图
- @参考文档
@前言
由于项目需求,需要对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架构平台下的运行界面: