发布时间:2025-12-09 17:21:25 浏览次数:4
GCC(GNU Compiler Collection,GNU 编译器套装),是一套由 GNU 开发的编程语言编译器。GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC 快速演进,变得可处理 C++、Fortran、Pascal、Objective-C、Java 以及 Ada 等他语言。
实际使用中:
一个 C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)等 4 步才能变成可执行文件。
预处理-Pre-Processing //.i文件
# -E 选项指示编译器仅对输入文件进行预处理g++ -E test.cpp -o test.i //.i文件编译-Compiling // .s文件
1# -S 编译选项告诉 g++ 在为 C++ 代码产生了汇编语言文件后停止编译2# g++ 产生的汇编语言文件的缺省扩展名是 .s 3g++ -S test.i -o test.s汇编-Assembling // .o文件
# -c 选项告诉 g++ 仅把源代码编译为机器语言的目标代码# 缺省时 g++ 建立的目标代码文件有一个 .o 的扩展名。g++ -c test.s -o test.o链接-Linking // bin文件
# -o 编译选项来为将产生的可执行文件用指定的文件名g++ test.o -o test示例代码:
// -Dname 定义宏name,默认定义内容为字符串“1”#include <stdio.h>int main(){#ifdef DEBUGprintf("DEBUG LOG\n");#endifprintf("in\n");}// 1. 在编译的时候,使用gcc -DDEBUG main.cpp// 2. 第七行代码可以被执行注:使用 man gcc命令可以查看gcc英文使用手册
案例:最初目录结构: 2 directories, 3 files
# 最初目录结构.├── include│ └── Swap.h├── main.cpp└── src└── Swap.cpp2 directories, 3 files最简单的编译,并运行
# 将 main.cpp src/Swap.cpp 编译为可执行文件g++ main.cpp src/Swap.cpp -Iinclude# 运行a.out./a.out增加参数编译,并运行
# 将 main.cpp src/Swap.cpp 编译为可执行文件 附带一堆参数g++ main.cpp src/Swap.cpp -Iinclude -std=c++11 -O2 -Wall -o b.out# 运行 b.out./b.out链接静态库生成可执行文件①:
## 进入src目录下$cd src# 汇编,生成Swap.o文件g++ Swap.cpp -c -I../include# 生成静态库libSwap.aar rs libSwap.a Swap.o## 回到上级目录$cd ..# 链接,生成可执行文件:staticmaing++ main.cpp -Iinclude -Lsrc -lSwap -o staticmain链接动态库生成可执行文件②:
## 进入src目录下$cd src# 生成动态库libSwap.sog++ Swap.cpp -I../include -fPIC -shared -o libSwap.so## 上面命令等价于以下两条命令# gcc Swap.cpp -I../include -c -fPIC# gcc -shared -o libSwap.so Swap.o## 回到上级目录$cd ..# 链接,生成可执行文件:sharemaing++ main.cpp -Iinclude -Lsrc -lSwap -o sharemain编译完成后的目录结构
最终目录结构:2 directories, 8 files
# 最终目录结构.├── include│ └── Swap.h├── main.cpp├── sharemain├── src│ ├── libSwap.a│ ├── libSwap.so1│ ├── Swap.cpp1│ └── Swap.o1└── staticmain112 directories, 8 files运行可执行文件①
# 运行可执行文件./staticmain运行可执行文件②
1# 运行可执行文件2LD_LIBRARY_PATH=src ./sharemain