GCC 简介
GCC 全称为 GNU Compiler Collection,即 GNU 编译器套件。是 GNU 项目开发的编译器软件,最初支持 C/C++,后拓展支持 ObjectC、Go、Fortran 等多种语言,发展为一个编译器套件,现在主要由 FSF 支持维护。
TencentOS Server 4 上的 GCC 选型及维护政策
TencentOS Server 4 预装 GCC 版本为12.x,在 GCC 上游社区的12版本完整维护周期内,本系统将会及时跟进小版本的更新,直至本发行版本不再维护。
TencentOS Server 4上的 GCC 组件
组件 | X86_64 | Aarch64 | 说明 |
gcc | 支持 | 支持 | GCC 的 C 编译器 |
gcc-c++ | 支持 | 支持 | GCC 的 C++编译器,有些发行版称为 g++ |
gccgo | 支持 | 支持 | GCC 的 Golang 编译器 |
gfortran | 支持 | 支持 | GCC 的 Fortran 编译器 |
gnat | 支持 | 支持 | GCC 的 Ada 编译器 |
gcc-objc | 支持 | 支持 | GCC 的 ObjectC 编译器 |
gcc-objc++ | 支持 | 支持 | GCC 的 ObjectC++编译器 |
gcc-gdc | 支持 | 支持 | GCC 的 D 语言编译器 |
gcc-gm2 | 不支持 | 不支持 | GCC 的 M2语言编译器,GCC13新增,TencentOS Server 4不支持 |
安装
# gccdnf install gcc# gcc-c++dnf install gcc-c++# gccgodnf install gccgo# gfortrandnf install gfortran# libtsandnf install libtsan# 使用tsan进行开发dnf install libtsan-devel# 其他组件请参看1.2,按照组件名进行安装# 请注意,libgomp不提供devel包
GCC 使用介绍
GCC 的使用流程简介 - 以 C 语言为例
以一个名为
helloworld.c 的 C 程序源码文件为例:#include <stdio.h>int main() {printf("hello,world!\\n");return 0;}
从安装到执行该源码的流程如下:
# 安装C编译器dnf install gcc# 编译为二进制gcc -o helloworld helloworld.c# 执行./helloworld
GCC 执行程序的更多功能介绍
编译器对源码处理过程可以分为预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)四个过程。下面我们来尝试使用 gcc 进行分步骤处理。
以一个名为
hellooc.cpp 的文件为例:#include <iostream>using namespace std;char* hellooc(char* oc) {cout << "hello, " << oc << "!" << endl;return oc;}
需要安装相对应的 GCC 编译器开发环境。
#安装 GCC C++编译器和 C++开发库、运行时dnf install gcc-c++ libstdc++-devel
预处理
首先进行预处理:
g++ -E -o hellooc.i hellooc.cpp# 结果过长,本文档不做结果展示,请自行执行查看less hellooc.i
编译
然后执行编译(狭义的编译),结果为汇编代码:
g++ -S -o hellooc.s -fPIC hellooc.i# 结果过长,本文档不做结果展示,请执行以下命令查看less hellooc.s
汇编编译
继续执行汇编编译,结果为未链接的目标文件:
g++ -c -o hellooc.o hellooc.s
链接
最后执行链接,结果为链接库:
# 动态链接g++ -o hellooc.so -shared -lstdc++ hellooc.o# 静态链接ar rcs hellooc.a hellooc.o
结果如下:
hellooc.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=92a45a52fc17fa866d765841e159d57271e767b1, not strippedhellooc.a: current ar archive