【C++】C/C++代码生成C/C++可执行程序

1、首先,GCC与G++分别是GNU 的C、C++编译器, GCC与G++在执行编译工作的时候,总共需要4步:

  • 1、预处理,生成 .i 的文件[预处理器cpp]
  • 2、将预处理后的文件转换成汇编语言,生成文件 .s [编译器egcs]
  • 3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]
  • 4、连接目标代码,生成可执行程序 [链接器ld]

这里以一个能在编译器下运行的C代码“main.c”为例,使用GCC编译对应的可执行程序。

1、预编译(Preprocessing)命令:会对各种预处理指令(#include、#define、#ifdef 等#开始的代码行)进行处理,删除注释和多余的空白字符,生成一份新的代码。

-o 参数:是对命令输出结果进行导入操作,这里是把 gcc -E main.c 操作结果输出到文件main.i中进行保存。预编译main.c,预编译之后得到的文件的名字叫main.i。

gcc -o main.i main.c -E  // 生成main.i

2、编译(Compilation)命令:对代码进行语法、语义分析和错误判断,生成汇编代码文件。这里加上 -std=c99与否由系统的c版本决定。

-S 参数:是gcc对目标文件进行编译,这里针对的是文件main.i文件。c

gcc -std=c99 -S main.i -o main.s  // 生成main.s

3、汇编(Assembly)命令:把汇编代码转换成计算机可认识的二进制文件,即把文本的c语言编译为二进制指令。

-c 参数:是gcc对目标文件执行指令转换的操作。

gcc -std=c99 -c main.c -o main.o  // // 生成main.o

4、链接(Linking)命令:把多个*.o文件合并成一个可执行文件,即二进制指令文件。后面的参数是一些代码依赖库。

将系统库函数与main.o进行链接,得到可执行的程序,该程序的名字叫main。

gcc -std=c99 -o main main.o -lm -lz -pthread

gcc -o main.i main.c -E  // 生成main.i
gcc -std=c99 -S main.i -o main.s  // 生成main.s
gcc -std=c99 -c main.c -o main.o  // // 生成main.o
gcc -std=c99 -o main main.o -lm -lz -pthread

参考文献:

如何使用gcc编译运行C程序?

你可能感兴趣的:(C++)