首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Linux】Linux编译器-gcc/g++使用

【Linux】Linux编译器-gcc/g++使用

作者头像
六点半就起.
发布2025-08-06 08:04:01
发布2025-08-06 08:04:01
2970
举报
【Linux】Linux编译器-gcc/g++使用
  • 背景知识(四个阶段主要操作)
    • 动静态库
    • gcc选项

背景知识(四个阶段主要操作)

  1. 预处理 (1)对源代码进行文本级别的处理,预处理后的源码(通常“ .i ”为扩展名) (2)头文件包含处理 (3)条件编译处理[#ifdef、#ifndef、#if、#else、#elif、#endif] (4)注释删除 (5)宏替换
  2. 编译 (1)生成汇编代码,“ .s”后缀 (2)语法,语义分析 (3)过滤空格,换行符等无关字符
  3. 汇编 (1)生成目标文件(.o或.obj为扩展名) (2)生成机器码【二进制】
  4. 连接 (1)将多个目标文件(.o/.obj)和所需的库文件(静态库.a/.lib或动态库.so/.dll)组合,生 .exe、 (2)生成可执行文件或库文件 (3)库文件处理(动静态连接) (4)移除未被使用的代码或数据

j (1).i :预处理后的源代码 (2).s 文件:汇编语言文件 (3).o 文件:(Linux/Unix 系统,Windows 系统对应.obj) 目标文件(Object File) (4).exe 文件:可执行文件

动静态库
  1. 静态库:指编译链接时,把库文件的代码全部加入到可执行文件中, (1)优缺点:文件比较大,但运行时不需要库文件了。静态库后缀名**“.a”**
  2. 动态库:在程序执行时由OS的动态链接器加载所需的动态库到内存 (1)优缺点:节省系统的开销。动态库后缀**“.so”**
  3. gcc 在编译时默认使用动态库
gcc选项

-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 -S 编译到汇编语言不进行汇编和链接 -c 编译到目标代码 -o 文件输出到 文件 -static 此选项对生成的文件采用静态链接 -g 生成调试信息。 -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库. -O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 -w 不生成任何警告信息。 -Wall 生成所有警告信息。

没经过处理的源码:

经过预处理到编译后:g++ -E test.cc -o test.i: 源码 - > 预处理代码 注释删除,宏替换,头文件包含处理

g++ -S test.i -o test.s后:预处理代码 -> 汇编代码

g++ -c test.s -o test.o后:汇编代码 -> 目标文件

g++ -o mytest test.o或则g++ test.o -o mytest.1后: 生成 .exe

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【Linux】Linux编译器-gcc/g++使用
  • 背景知识(四个阶段主要操作)
    • 动静态库
    • gcc选项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档