1.存档archive
- 存档(archive):Linux的静态库以archive格式存放在磁盘中,它是一组连接起来的可重定位目标文件的集合,由后缀.a标识。例如有两个程序addvec.c,multvec.c,现在想将它们的目标文件组成libvector.a静态库:
gcc -c addvec.c multvec.c
ar rcs libvector.a addvec.o multvec.o
- 换言之,一个静态库由多个目标文件组成;一个可执行文件由多个可重定位的目标文件(包括主程序目标文件、静态库的目标文件等)组成。
2.加载可执行目标文件
- 1)当加载器运行时,它创建类似于图7-15所示的内存映像。在程序头部表的引导下,加载器将可执行文件的片(chunk)复制到代码段和数据段。然后加载器跳到程序的入口点(_start函数地址,它在系统目标文件ctrl.o中定义)。
- 2)_start函数调用系统启动函数__libc_start_main(定义在libc.o),它初始化执行环境,调用用户层的mian函数,处理main函数的返回值,并且在需要的时候把控制返回给内核。