《linker & loader》读书笔记

最近读《linker & loader》一书,对一直困扰自己的一些疑惑做了整理。

 

 

1.编译器与汇编器区别:两者没什么关系
编译器:将源文件(如c)生成中间代码,汇编或机器码。

汇编器:将汇编语言源码生成机器码。


但是,编译器和汇编器有协同关系,例如处理C源文件A:


C语言预处理器处理A,生成预处理的A
C语言编译预处理的A,生成汇编文件A
汇编器处理汇编文件A,生成目标文件A


2.自动链接标准库


n示例:g++ -o hello hello.cpp,编译hello.cpp为可执行

文件hello,自动连接标准C++库libstdc++.so

n示例:gcc –o hello hello.c,编译hello.c为可执行文件

hello(自动连接标准C库libc.so)

 

3.编译器、汇编器、链接器和加载器

编译器和汇编器创建了目标文件(包含由源程序生成的二进制代码和数据)。链接器
将多个目标文件合并成一个,加载器读取这些目标文件并将它们加载到内存中

Linux下加载器的例子? 个人认为是shell。

 

你可能感兴趣的:(Overview,of,Computer,Science,(计算机科学导论))