编译连接装载库
文章平均质量分 92
li_wen01
liwen01
展开
-
Hello World 深入理解(4)——静态链接
前言:问题: #include <stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的? 不同的编译器(Microsoft VC、GCC)和不同的硬件平台(x86、SPARC、MIPS、ARM),以及不同的操作系统(Windows、Linux、UNIX、Solaris),最终编译出来的结果一样吗?为什么?链接的接口——符号链接过程的本质就是要把多个不同的目标文件之间相互“粘”到一起,或者说像玩具积木一样,可以拼............原创 2020-12-10 20:20:59 · 1229 阅读 · 0 评论 -
Hello World 深入理解(3)——目标文件分析
前言: 问题:最后编译出来的可执行文件里面是什么?除了机器码还有什么?他们怎么存放的?怎么组织的? 在Linux系统中可执行文件属于elf文件格式中的一种,它里面有编译后的机器指令,数据,符号表,调试信息,字符串等等信息。如果要知道它是如何存放的,那就需要了解ELF文件格式可执行程序:可执行文件格式( Executable)主要是 Windows下 的 PE (Portable Executable)和 Linux 的 ELF (Executable Linkable For........原创 2020-12-10 20:19:50 · 580 阅读 · 0 评论 -
Hello World 深入理解(2)——编译过程与编译原理
前言: 问题:编译器在把C语言程序转换成可以执行的机器码的过程中做了什么?怎么做的? 编译一个C程序可以分为四阶段,预处理阶段->生成汇编代码阶段->汇编阶段->链接阶段,这里以linux环境下gcc编译器为例。 使用gcc时默认会直接完成这四个步骤生成可以执行的程序,但通过编译选项可以控制值进行某些阶段,查看中间的文件。1.万能程序大法----Hello World #include <st.........原创 2020-12-10 20:18:38 · 1346 阅读 · 1 评论 -
Hello World 深入理解(1)——序言
最近看了《程序员的自我修养——链接装载与库》,少有的国内优秀计算机书籍。它在开篇的时候提出了下面的9个问题: 1.程序为什么要被编译器编译后才能运行? 2.编译器在把C语言程序转换成可以执行的机器码的过程中做了什么?怎么做的? 3.最后编译出来的可执行文件里面是什么?除了机器码还有什么?他们怎么存放的?怎么组织的? 4.#include <stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的? 5............原创 2020-12-10 20:17:36 · 474 阅读 · 1 评论