GCC编译总结

概述

本文为使用GCC编译C源代码总结
本文代码如下:

//main.c
#include <stdio.h>

#define Pi 3.14

int main(int argc, const char * argv[]) {
    printf("hello world\n");
    
    float i = 0.0;
    i = i + Pi;
    printf("i = %f\n", i);
    
    return 0;
}

预处理

执行如下命令,可在文件main.i中生成预处理后的代码
gcc -E main.c -o main.i
上述命令的作用是让GCC编译器预处理main.c文件并将预处理后的结果保存到main.i文件中,其中

  • -E表示预处理后停止编译
  • -o file表示将预处理后的结果保存到file文件中,在本文中是保存到main.i文件中

注意:GCC命令中的选项区分大小写,如果上述命令中-E改为-e则会报错:error:no input files
图1为经过预处理后的代码,可以看到代码中宏定义Pi已经被替换了。

图1 预处理后部分代码

编译

执行如下命令,可在文件main.s中生成经过预处理、编译后的代码
gcc -S main.c -o main.s
上述命令的作用是让GCC编译器预处理、编译main.c文件并将编译生成的汇编代码存储到main.s文件中,其中

  • -S表示预处理、编译后即停止。
图2 预处理、编译生成的汇编代码

汇编

执行如下命令,可在文件main.o中生成经过预处理、编译、汇编后的代码(为二进制格式)

  • gcc -c main .c -o main.o让GCC编译器预处理、编译、汇编main.c文件,并将汇编生成的目标文件代码保存到main.o中
  • as main.s -o main.o用汇编器从汇编代码生成目标代码

其中

  • -c表示预处理、编译、汇编后停止。

链接

执行如下命令
gcc main.c -o main
从C源程序直接生成执行代码

参考

  1. GCC手册
  2. Invoking GCC
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容