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

1-5gcc

文章目录

    • 1. gcc工作流程
    • 2.常用参数
    • 3.gcc和g++

1. gcc工作流程

  1. 预处理:调用预处理器,展开头文件,宏替换,去掉注释行,得到的还是源文件
  2. 编译:调用编译器汇编,得到汇编文件
  3. 汇编:调用汇编器,得到二进制文件
  4. 链接:调用链接器对需要的库进行链接,得到可执行二进制
gcc test.c -o name
# 不加 -o参数 默认生成a.out 可执行程序

2.常用参数

gcc编译选项含义
-o指定名字
-I指定include包含文件的搜索目录
-g在编译时生成调试信息
-w不显示警告信息
-wall显示所有警告信息
-On编译器对代码进行优化,n取值范围0~3,O0不优化,O1默认优化,2,3级别更高
-std指定语言标准
-D编译时指定一个宏
-l指定使用的库 (库文件要掐头去尾 xxx)
-L搜索库的路径
-fPIC/-fpic生成与位置无关的代码
-shared生成共享目标文件,通常用在建立共享库时

2.1 指定一个宏(-D)

在程序中有很多打印输出,这些在程序完成后是不需要的,如果事后删除很麻烦,就可以在程序里使用#ifdef DEBUG #endif 在调试的时候,编译指定宏,调试完成不在指定,自动就会删除

3.gcc和g++

  1. 编译阶段
  • 后缀为.c的文件,gcc会看做c程序,g++会看做是c++程序
  • 后缀为.cpp的文件,两者都会看作是c++文件
  • 重点:g++会调用gcc,底层还是gcc编译,两者都可以编译c/c++代码
  1. 链接阶段
  • gcc 和g++都可以链接到标准c库
  • g++可以自动链接到c++库,但是gcc需要指定-lstdc++参数
  1. 关于__cplusplus宏的定义
  • gcc会自动定义__cplusplus,但是不影响编译c文件
  • gcc会根据文件后缀判断是否需要定义__cplusplus

总结:

两者都既可以编译C/C++

g++可以直接编译cpp,而gcc需要指定链接参数


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

相关文章:

  • 【Electron入门】进程环境和隔离
  • 水仙花数Ⅰ
  • Windows 11 新增拖拽分享功能及开始菜单布局优化
  • 动态绑定属性和方法
  • unity pico开发二:创建基本的交互
  • BUG: 解决新版本SpringBoot3.4.3在创建项目时勾选lombok但无法使用的问题
  • pyQT5简易教程(一):制作一个可以选择本地图片并显示的桌面应用
  • 数据结构~哈希
  • 高频 SQL 50 题(基础版)| 排序和分组:2356. 每位教师所教授的科目种类的数量
  • 使用AoT让.NetFramework4.7.2程序调用.Net8编写的库
  • Mac 中与PyCharm 中的单步调试快捷键
  • 【江科大STM32】TIM输出比较-PWM功能(学习笔记)
  • 【JS】Web Worker知识和动态创建以及场景案例
  • YOLOv8 行人相关识别技术提升
  • P3372 【模板】线段树 1
  • 自用的vim脚本
  • Springboot使用Milvus的基本操作
  • 基于Django的考研院校数据分析及推荐系统
  • cpp重写堆的比较函数
  • MapStruct 对象转换工具【DDD 架构】