入门底层

汤奕铄 2019-01-31 02:38:47
学习gcc的基本概念与简单用法。 1、GCC与gcc GCC (GNU Compiler Collection) GNU 编译器集合,包含众多语言的编译器,包括C,C++,Java等等 GCC多用于嵌入式操作系统的编译,如Linux,VxWorks,Android等等 gcc 单指GCC中的C语言编译器 gcc 多用于内核开发以及少数应用程序开发 2、gcc的幕后工作 想了解更多更详细的关于编译链接深层次内容,请阅读书籍《CSAPP》第7章与《程序员的自我修养》,因为这里我的学习记录只记录结果与常用的几个编译方法。 我们先来看一个简单的程序: test.c源程序: #include <stdio.h> #include "func.h" int g_global = 0; int g_test = 1; int main(int argc, char *argv[]) { func(); printf("&g_global = %p\n", &g_global); printf("&g_test = %p\n", &g_test); printf("&func = %p\n", &func); printf("&main = %p\n", &main); return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 func.h头文件: #include <stdio.h> void func() { #ifdef TEST printf("TEST = %s\n", TEST); #endif return; } 1 2 3 4 5 6 7 8 9 10 在Linux下使用gcc进行编译: gcc test.c -o test 1 然后运行: ./test 1 结果如下: &g_global = 0x804a020 &g_test = 0x804a014 &func = 0x80483c4 &main = 0x80483c9 1 2 3 4 很明显,上述程序很简单,大一的新生都知道为什么。但是今天我们不是学习这个程序的,而是想要了解,运行 gcc test.c -o test 这个命令后,是如何一步一步生成可执行文件test的。 实际上,上述C程序从源文件到二进制可执行文件,有以下四个步骤: 预处理 cpp C编译 cc 汇编 as 链接 ld 大概编译一个源程序为二进制文件的过程如下图所示: 在这里插入图片描述
...全文
22 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
汤奕铄 2019-01-31
  • 打赏
  • 举报
回复
QQ:1247333786

791

社区成员

发帖
与我相关
我的任务
社区描述
区块链技术专区
区块链 技术论坛(原bbs)
社区管理员
  • 区块链技术
  • ccc908
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧