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

【Linux】开发工具3 : gcc/g++的使用

其他篇章 【C语言专栏】

其他篇章【Linux专栏】

上期回顾 【Linux】开发工具2:vim

文章目录

  • 前言
  • 1. gcc/g++的使用
    • 1.1 预处理(进行宏替换)
    • 1.2 编译(生成汇编)
    • 1.3 汇编(生成机器可识别代码)
    • 1.4 链接(生成可执行文件或库文件)
    • 1.5 gcc 可以一步生成一个执行程序(将四个步骤合并)

前言

在使用一门编辑语言的时候,我们都必须安装相应的开发包(即头文件和库文件)

  • 头文件:函数的声明
  • 库文件:函数的实现

查看头文件:ls /usr/include/

1. gcc/g++的使用

  • gcc:编译C语言
  • g++:编译 C/C++

生成可执行文件:预处理、编译、汇编、链接

1.1 预处理(进行宏替换)

主要处理以# 开头的指令,核心任务有:

  • 宏替换:把所有 #define 定义的宏(包括函数宏、常量宏),直接替换成对应的文本。
  • 去注释:注释不参与编译,去掉可以减少文件大小
  • 条件编译:#ifdef / #ifndef / #if / #else / #endif 等指令,只保留满足条件的代码段,删除不满足的分支。
  • 头文件展开:把 #include <xxx.h> / #include “xxx.h” 对应的头文件内容,完整复制到当前文件中。

命令:gcc -E test.c -o test.i

  • 选项“-E”,该选项的作⽤是让 gcc 在预处理结束后停⽌编译过程。
  • 选项“-o”是指⽬标⽂件,“.i”⽂件为已经过预处理的C原始程序。

!!!注意区分:

命令作用生成的文件类型能否直接运行
gcc -E test.c -o test.i只做预处理C源码文件 ( .i )不能
gcc test.c -o test完整编译+链接可执行程序可以

示例:


结果:

解析:

  1. #define DEBUG 1 :定义了一个名为 DEBUG 的宏,值为1。

  2. #ifdef DEBUG :预处理指令,意思是“如果 DEBUG 这个宏被定义了,就执行下面的代码”。

  3. 因为 DEBUG 已经被定义了,所以预处理时会保留 printf(“Debug mode\n”);

  4. 这行代码,程序运行时会打印 Debug mode 。

1.2 编译(生成汇编)

  • 在这个阶段中,gcc ⾸先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的⼯作,在检查⽆误后,gcc 把代码翻译成汇编语⾔。
  • -S:(仅执行编译,停止后续流程)
  • .s:输出的汇编文件(test.s)

命令:gcc –S test.i –o test.s

[qianyv@VM-0-9-centos~]$ gcc-S test.c-o test.s[qianyv@VM-0-9-centos~]$ ll total28-rw-rw-r--1qianyv qianyv135Apr2614:19test.c-rw-rw-r--1qianyv qianyv16878Apr2614:11test.i-rw-rw-r--1qianyv qianyv446Apr2615:00test.s-rw-r--r--1root root0Apr1922:08test.txt

1.3 汇编(生成机器可识别代码)

汇编阶段是把编译阶段⽣成的“.s”⽂件转成⽬标⽂件

  • -c:仅执行汇编,生成目标文件
  • .o:输出的目标文件(test.o)—二进制格式,不能执行

命令:gcc –c test.s –o test.o

[qianyv@VM-0-9-centos~]$ gcc-c test.s-o test.o[qianyv@VM-0-9-centos~]$ ll total32-rw-rw-r--1qianyv qianyv135Apr2614:19test.c-rw-rw-r--1qianyv qianyv16878Apr2614:11test.i-rw-rw-r--1qianyv qianyv1496Apr2615:03test.o-rw-rw-r--1qianyv qianyv446Apr2615:00test.s-rw-r--r--1root root0Apr1922:08test.txt

1.4 链接(生成可执行文件或库文件)

将目标文件(.o)和库进行链接,就得到了可执行程序

  • -o:用来指定可执行程序的名称(这里我写了是test),不写的话默认是 a.out

gcc test.o -o test

[qianyv@VM-0-9-centos~]$ gcc test.o-o test[qianyv@VM-0-9-centos~]$ ll total44-rwxrwxr-x1qianyv qianyv8360Apr2615:08test-rw-rw-r--1qianyv qianyv135Apr2614:19test.c-rw-rw-r--1qianyv qianyv16878Apr2614:11test.i-rw-rw-r--1qianyv qianyv1496Apr2615:03test.o-rw-rw-r--1qianyv qianyv446Apr2615:00test.s-rw-r--r--1root root0Apr1922:08test.txt

1.5 gcc 可以一步生成一个执行程序(将四个步骤合并)

http://www.jsqmd.com/news/704596/

相关文章:

  • MCP 2026安全补丁落地失败率骤降83%的关键配置(2026年Q1全网TOP3企业已验证)
  • 自动驾驶算法岗必备:手把手教你优化C++角度归一化代码(从Apollo源码说起)
  • 4.17 拦截器
  • CloudCompare里那个CSF地面滤波插件,到底怎么用?手把手教你分离点云里的地面
  • D2RML终极指南:暗黑破坏神2重制版多开工具完整教程
  • 如何构建专业级设计系统:Outfit字体9字重开源解决方案技术架构指南
  • 系统管理相关的操作总结
  • 终极免费Switch模拟器Ryujinx:在PC上畅玩任天堂游戏的完整实战指南
  • 权限不是配置,是计算——MCP 2026动态分配核心算法解析,含PDP策略决策树与PEP响应延迟压测数据(实测<12ms)
  • 视频修复专家:3步拯救你的损坏MP4/MOV文件
  • MCP 2026适配不是选择题——而是生存线:某国家级超算中心被迫停机72小时后的重构启示录
  • CLion远程调试踩坑实录:当GDBServer版本不匹配时,我们该如何优雅解决?
  • 如何让经典游戏在现代显示器上完美呈现?PvZWidescreen模组的技术解析
  • 一线中石化加油卡回收平台优选 - 京顺回收
  • 终极指南:3分钟解决iPhone USB网络共享的Windows驱动问题
  • AntiDupl.NET:智能图片去重工具的完整指南与核心技术解析
  • VS Code 远程容器开发安全漏洞清单:8个被90%团队忽略的配置雷区,今天不修明天被攻破
  • 为什么92%的MCP国产化项目在第三阶段崩溃?深度解析国密SSL双向认证调试断点(含GDB+Wireshark联合抓包实录)
  • 3步精通Ryujinx:在PC上完美运行Switch游戏的终极指南 [特殊字符]
  • E7Helper终极指南:5分钟完成第七史诗自动化脚本配置
  • 小米10s格机后NV报错别慌!手把手教你备份与修复基带分区(附工具下载)
  • 机器学习核心概念与实战技巧解析
  • 从零造一个 DALL·E 2:AI 绘画背后的秘密,我一口气讲清楚
  • BitNet-b1.58-2B-4T-GGUF开发环境搭建:从零配置Python与C++混合环境
  • VS Code MCP调试黑盒揭秘:用mcp-debug-adapter反向追踪tool调用链,精准捕获missing-tool-definition异常源头
  • Zotero SciPDF插件:科研文献PDF自动下载的终极免费方案
  • 日志告警准确率从61%跃升至94.2%,MCP 2026增强版上线首周就该做的6项关键校准,晚配=漏控重大风险
  • 5个技巧快速掌握Dark Reader暗黑模式插件的核心功能
  • CPUDoc完全指南:解锁CPU隐藏性能的三大黑科技
  • 终极解密:MS-DOS源代码如何塑造现代操作系统架构