zoukankan      html  css  js  c++  java
  • GNU工具链学习笔记

    GNU工具链学习笔记

    1..so为动态链接库,.a为静态连接库。他们在Linux下按照ELF格式存储。ELF有四种文件类型。可重定位文件(Relocatable file,*.o,*.a),包含代码和数据,可用来连接成可执行文件或共享目标文件;可执行文件(Executable File),ELF可执行文件;共享目标文件(Shared Object File,*.so),包含代码和数据;核心转储文件(Core Dump File),进程意外终止时,系统将该进程的地址空间内容和其他信息保存到该文件中。
    file命令可以查看。
    2,Objdump程序,来自binutils,可以查看Object file内的结构。-h:打印各个段基本信息;-s所有段内容以16进制打印;-d:将所有包含指令的段反汇编。
    3, ar -t libc.a;查看libc.a压缩了那些.o文件。
    4, collect2 是ld连接器的包装,它调用ld链接目标文件,并对结果做处理,包括收集所有与程序初始化相关的信息并构造初始化结构。
    5,readelf:查看ELF文件。 -s:打印符号信息;

    6, size *.o : 用于查看ELF文件代码段,数据段和BSS(Block Started by Symbol,为未初始化的全局变量和局部静态变量预留位置)段的长度。
    7, nm:查看目标文件的符号信息。
    8,C运行时库GlibC,由两部分组成,头文件和二进制库,前者多在/usr/include下,后者主要是C语言的标准库,有静态(/usr/lib/libc.a)和动态(/lib/libc.so.6)两个.另外还有/usr/lib/crt1.o(含程序入口函数_start,负责初始化libc和调用main),/usr/lib/crti.o(负责main函数执行前全局和静态对象的构造)和/usr/lib/crtn.o(负责main函数执行后,全局和静态对象的析构)三个辅助程序运行的库。链接器会收集所有输入目标文件中对全局和静态对象的构造/析构操作,合并到输出文件的构造和析构操作中。
    9.GCC中的几个库文件,这些库文件都在GCC的安装目录下,Gentoo系统中的目录为/usr/lib/gcc/i686-pc-linux-gnu/4.4.3/。crtbeginT.o和crtend.o,负责C++全局构造和析构的目标文件,因为glibc只是C语言运行库,GCC实现C++语言,所以C++中构造和析构需要glibc中的C语言构造/析构和GCC中相应的构造/析构。libgcc.a用来对付GCC在多平台上运行时的差异问题;libgcc_eh.a包含了支持C++异常处理的平台相关函数。libgcc_s.so是libgcc.a的动态链接版本。
    10.ldd 打印共享库依赖关系。

    以上内容摘抄自《程序员的自我修养 –链接,装载与库》

     
    0
  • 相关阅读:
    织梦开发——相关阅读likeart应用
    织梦标签教程
    织梦专题调用代码
    HIT 2543 Stone IV
    POJ 3680 Intervals
    HIT 2739 The Chinese Postman Problem
    POJ 1273 Drainage Ditches
    POJ 2455 Secret Milking Machine
    SPOJ 371 Boxes
    HIT 2715 Matrix3
  • 原文地址:https://www.cnblogs.com/timssd/p/5639325.html
Copyright © 2011-2022 走看看