博客
关于我
Linux--编译器gcc/g++
阅读量:793 次
发布时间: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/

    你可能感兴趣的文章
    Linux 不同方法查看进程消耗CPU IO 等
    查看>>
    linux 两块硬盘合并成一块
    查看>>
    Linux 中 Grep 命令的常见示例
    查看>>
    Linux 中如何避免 rm -rf /*
    查看>>
    Linux 中文打字软件 gtypist 光标错位解决
    查看>>
    linux 中文显示乱码解决办法
    查看>>
    linux 中文游戏网站,5款值得推荐的免费游戏
    查看>>
    Linux 中某个目录中的文件数如何查看?这篇教程分分钟教会你!
    查看>>
    Linux 中的 /dev/random 和 /dev/urandom 是什么?
    查看>>
    Linux 中的 15 个强大的 firewall-cmd 命令
    查看>>
    Linux 中的 bc 命令:用于精度计算的利器
    查看>>
    Linux 中的 Nslookup 命令怎么使用?
    查看>>
    Linux 中的 Umask 是什么?
    查看>>
    Linux 中的 utmp、wtmp 和 btmp 文件是什么?
    查看>>
    Linux 中的 文件系统表Fstab 是什么?
    查看>>
    linux 中的.so和.a文件
    查看>>
    Linux 中的ps -ef | grep -v awk -z -f参数详解
    查看>>
    Linux 中的密码生成器:如何在命令行中生成随机密码
    查看>>
    Linux 中的机器学习:Whisper——自动语音识别系统
    查看>>
    Linux 中的管道(Pipeline)和使用场景
    查看>>