本文共 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/