当前位置: 首页 > article >正文

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代码

http://www.kler.cn/a/455337.html

相关文章:

  • Nmon(Nigel‘s Performance Monitor)
  • OpenCV-Python实战(6)——图相运算
  • C语言----变量与常量
  • 【报错】node:internal/modules/cjs/loader:936
  • MySql详细教程-从入门到进阶(超实用)
  • Vim 编辑器详细教程
  • 全局webSocket 单个页面进行监听并移除单页面监听
  • 【test】git clone lfs问题记录
  • 从VLM到VLA概论
  • SAQ可持续发展评级最新消息
  • Milvus 中,FieldSchema 的 dim 参数和索引参数中的 “nlist“ 的区别
  • page_ref_freeze浅析
  • 34 - Java 8 Stream
  • 微服务——部署与运维
  • elasticsearch中使用fuzzy查询
  • docker卸载
  • 算法练习——位运算
  • windows下vscode使用msvc编译器出现中文乱码
  • 使用ffmpeg时,出现缺少libmvec.so.1共享库的问题
  • vscode-QT环境配置
  • uniapp中Nvue白屏问题 ReferenceError: require is not defined
  • TOTP双因素认证(2FA)php简单实现
  • 利用 Python 编写一个 VIP 音乐下载脚本
  • 软体机器人研究报告:设计方法、材料与驱动、感知与控制
  • 【MuJoCo和PhysX】
  • GFPS扩展技术原理(十)-FMDN Notification