linux C/C++运行时库总结归纳

    c标准运行库也即libc.a大概实现了如下功能
启动与退出:如exit
标准函数:如printf、strlen
io函数:如fread、fwrite
堆:如malloc、free
    c标准运行库的函数对任何系统通用(c函数跨操作系统平台),它将不同操作系统的API抽象
成相同的库函数(c标准函数)如,库函数fread在Linux最终会调用read函数,在windows最终会调用readfile函数。
    glibc是c标准库在Linux中的扩展(超集),扩展了Linux特性的函数库,如pthread等。glibc也就成了linux系统
的标准c库。glibc除了包括libc.a,libpthread.a等标准库外,还包括/usr/lib/crt1.o 、/usr/lib/crti.o、 /usr/lib/crtn.o。
crt1.o 里面包含程序入口函数_start,它负责调用__libc_start_main初始化libc并调用main函数进入程序主体。

       可执行文件中的.init和.finit两个段在链接时由各输出文件(.o)的.init段和.fini段和并而成,包含_init和_finit两个函数的实现

crti.o和crtn.o中包含的代码实际是_init和_finit两个函数的开始部分和结尾部分,即_init函数的开始部分来自于crti.o的.init段,结束部分来自于crtn.o的.init段

文件链接时的顺序为:
ld crt1.o crti.o  user.o libc.a libuser.a  crtn.o

c程序运行的调用关系如下:
_start-->__libc_start_main
        -->__libc_csu_init   //调用_init()-->_do_gloabal_ctors_aux(构造 由gcc中crtbeginT.o文件提供)
        -->main                                //主函数
        -->exit-->__libc_csu_finit     //负责调用_finit函数

gcc中包括:crtbeginT.o、crtend.o、 libgcc.a、 libgcc_eh.a
c++的实现与编译器密切相关的,glibc只是一个c运行库,它对c++的实现不了解,而gcc是c++的真正实现者

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值