自学内容网 自学内容网

GCC编译器

原名GNU C语言编译器(GNU C Compiler)

介绍

GCC 原名为 GNU C语言编译器,因为它原本只能处理 C 语言,但如今的 GCC ,不仅可以编译 C、C++ 和 Objective-C,还可以通过不同的前端模块支持各种语言,包括 Java、Fortran、Ada、Pascal、Go 和 D 语言等等。

GCC、gcc、g++三者之间的关系:
gcc(GUN C Compiler)是GCC中的c编译器,而g++(GUN C++ Compiler)是GCC中的c++编译器。
gcc和g++两者都可以编译c和cpp文件,但存在差异。gcc在编译cpp时语法按照c来编译但默认不能链接到c++的库(gcc默认链接c库,g++默认链接c++库)。g++编译.c和.cpp文件都统一按cpp的语法规则来编译。所以一般编译c用gcc,编译c++用g++。

安装命令

sudo apt install gcc g++

查看版本

gcc/g++ -v/--version

GCC工作流程

  1. 预处理——预处理器(cpp)
    • 命令:gcc -E
    • .cpp文件生成.i文件
    • 主要操作:
      • 头文件展开:处理 #include 指令,将指定的头文件内容插入到源代码中。这可以是标准库头文件或用户自定义的头文件。
      • 宏替换:处理 #define 指令,定义宏。预处理器会用宏的值替换代码中的宏名称。
      • 删除注释:预处理器会删除源代码中的注释(///* ... */),以便于后续的编译处理。
    • 示例:gcc -E hello.c -o hello.i
  2. 编译——编译器(gcc)
    • 命令gcc -S
    • 生成.s文件,汇编文件
    • 主要操作:扫描(词法分析)、语法分析、语义分析、源代码优化(中间语言生成)、代码生成
    • 示例:gcc -S hello.c -o hello.s
  3. 汇编——汇编器(as)
    • 命令:gcc -c
    • 生成.o文件,二进制文件
    • 主要作用:汇编器将汇编代码转变为可以执行的执行,生成目标文件
    • 示例:gcc -c hello.c -o hello.o
  4. 链接——链接器(ld)
    • 命令:gcc
    • 生成课执行文件,默认的文件名是a.out
    • 主要作用:将函数库种相应的代码组合到目标文件中
    • 示例:gcc hello.o -o hello
  • 一步生成最终可执行程序:gcc hello.o -o hello

GCC常用参数选项

gcc编译选项说明
-v查看gcc版本号
-E生成预处理文件
-S生成汇编文件
-c只编译,生成.o文件,通常称为目标文件
-I指定头文件所在的路径
-L指定库文件所在的路径
-l指定库的名字
-o指定生成的目标文件的名字
-g包含调试信息,使用gdb调试需要添加该参数
-Onn=0~3,n越大编译器优化的越多
-D在程序编译的时候,指定一个宏
-w不生成任何警告信息
-Wall生成所有警告信息
-fPIC/fpic生成与位置无关的代码
-shared生成共享目标文件,通常用在建立共享库时
-std指定C语言标准,如-std=c99,按照C99标准来编译C代码

原文地址:https://blog.csdn.net/qq_44181637/article/details/144778109

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!