博客
关于我
Linux--编译器gcc/g++
阅读量:805 次
发布时间:2023-02-02

本文共 1118 字,大约阅读时间需要 3 分钟。

学习 Linux 中的 GCC 和 G++ 编译器

1. 曾学过的 knowledge

  • 编译器:用于将源代码转换为机器代码(可执行文件)。
  • 预处理:处理源代码中的宏定义、文件包含和条件编译等。
  • 编译:预处理后的源代码转换为汇编语言代码。
  • 汇编:汇编语言代码转换为机器码(二进制)。
  • 连接:将多个目标文件和库文件合并为一个可执行文件或库文件。

2. 实践学习

2.1 在线考试

每天进行在线考试,巩固对 GCC 和 G++ 的理解和使用。

2.2 实践项目

参与实践项目,其中包括:

  • 简单的算术程序:使用 C语言和 GCC 编写一个简单的算术程序,理解编译过程。
  • 动态链接库:创建一个动态链接库,然后在主程序中使用它,理解动态链接的概念。
  • 静态链接库:创建一个静态链接库,并使用它来生成可执行文件,比较动态和静态链接的优缺点。

2.3 深入学习

阅读《深入理解 GCC》和《高效 C/C++ 编程》,了解 GCC 的高级功能和编写高性能代码的技巧。

3. GCC 掌握情况

3.1 常用选项

  • -E:只进行预处理,不生成预处理结果文件。
  • -S:将预处理后的代码转换为汇编语言,不进行汇编。
  • -c:将汇编语言代码转换为机器码(目标文件)。
  • -o:指定生成的目标文件名。
  • -static:静态链接,生成静态可执行文件。
  • -g:生成调试信息,以供调试器使用。
  • -shared:将目标文件生成动态链接库。
  • -O:优化编译阶段,优化级别从 0 到 3,-O3 为最高优化级别。

4. 链接与库

4.1 静态库 vs 动态库

  • 静态库(.a 文件):编译时将所有代码和数据加入可执行文件内部,不依赖外部库文件。
  • 动态库(.so 文件):编译时仅生成接口定义,运行时动态加载库文件,减少内存占用和资源浪费。

4.2 安装静态库

在云服务器上安装:

sudo yum install -y glibc-staticsudo yum install -y libstdc++-static

5. 调试与测试

5.1 调试选项

在编译时使用 -g 选项,生成调试信息:

gcc -g -o main main.c

5.2 使用 GDB 调试

安装 GDB:

sudo yum install -y gdb

调试步骤:

  • 运行程序,导致崩溃。
  • 使用 GDB 附加取消 checkpoints (KP) 并查看栈迹。
  • 6. 结论

    通过实践和深入学习,我对 GCC 和 G++ 的使用更加熟练,能够使用不同的选项进行编译和调试,理解静态和动态链接的原理,并能够处理常见的编译问题。继续努力,掌握更多高级编译器技巧,为以后编写高效、高性能的 C/C++ 程序打下坚实基础!

    转载地址:http://fwzfk.baihongyu.com/

    你可能感兴趣的文章
    Netty学习总结(3)——Netty百万级推送服务
    查看>>
    Netty学习总结(5)——Netty之TCP粘包/拆包问题的解决之道
    查看>>
    Netty学习总结(6)——Netty使用注意事项
    查看>>
    Netty客户端断线重连实现及问题思考
    查看>>
    Netty工作笔记0001---Netty介绍
    查看>>
    Netty工作笔记0003---IO模型-BIO-Java原生IO
    查看>>
    Netty工作笔记0006---NIO的Buffer说明
    查看>>
    Netty工作笔记0007---NIO的三大核心组件关系
    查看>>
    Netty工作笔记0008---NIO的Buffer的机制及子类
    查看>>
    Netty工作笔记0009---Channel基本介绍
    查看>>
    Netty工作笔记0011---Channel应用案例2
    查看>>
    Netty工作笔记0013---Channel应用案例4Copy图片
    查看>>
    Netty工作笔记0014---Buffer类型化和只读
    查看>>
    Netty工作笔记0020---Selectionkey在NIO体系
    查看>>
    Netty工作笔记0022---NIO快速入门--编写客户端
    查看>>
    Vue踩坑笔记 - 关于vue静态资源引入的问题
    查看>>
    Netty工作笔记0024---SelectionKey API
    查看>>
    Netty工作笔记0025---SocketChannel API
    查看>>
    Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
    查看>>
    Netty工作笔记0028---NIO 网络编程应用--群聊系统3--客户端编写1
    查看>>