zoukankan      html  css  js  c++  java
  • 链接与加载过程中,几个关键的概念

    http://www.cnblogs.com/qiaoconglovelife/p/5870000.html

    • 加载(load)

      • 将程序拷贝到存储器并运行的过程,由加载器(loader)执行。
    • 链接分类

      • 编译时(compile time)链接:也称为传统静态链接、静态链接;
      • 加载时(load time)链接:在程序被加载的时候动态链接共享库;
      • 运行时(run time)链接:在程序运行时根据需要动态链接共享库。
    • 目标文件

      • 可重定位目标文件:可被链接生成可执行目标文件;
      • 可执行目标文件:可被直接拷贝至存储器中运行;
      • 共享目标文件:可以在加载或者运行时被动态地加载到存储器并链接。
    • 库分类

      • 静态库:只能在编译时被静态链接 .a;
      • 共享库:可以加载时链接或运行时链接 .so .dll 。
    • 静态库

      • 本质上是一组可重定位目标文件,在链接时,静态链接器只拷备被程序引用的目标模块:
      • 优点
        • 将一组可重定位目标文件打包至一个静态库,方便使用;
        • 在链接时,只拷备被引用模块,减小可执行文件的大小;
      • 应用举例:C语言的众多库函数有以下几种打包方式:
        • 编译器自动识别并链接:优(1 方便编程),缺(1 C库函数过多,使编译器变得复杂;2 升级时必须更新编译器版本);
        • 将所有C库函数放入一个可重定位目标模块:优(1 方便链接,2 方便升级),缺(1 链接时会拷备所有函数,引起代码量过大);
        • 将每个库函数放入多个可重定位目标模块:优(1 最终程序代码量小),缺(1 不方便链接);
        • 将所有库函数打包成一个静态库:优(1 方便升级;2 方便链接;3 最终程序代码量小),缺(1 库函数升级时,必须重新编译程序;2 不能在程序之间共享库函数)
    • 共享库

      • 两种方式
        • 加载时链接:当创建可执行文件时,静态执行一部分链接,然后在程序加载时,动态完成链接过程。
        • 运行时链接:在程序运行过程中打开共享库、定位符号地址、完成使用、关闭共享库;
          • 应用举例:软件升级(Windows的一些升级就通过更新共享库来完成);
          • Linux API:dlopen(打开并加载共享库)、dlsym(获取符号地址)、dlclose(关闭共享库)。
      • 与静态库区别
        • 在加载时/运行时链接,而不是编译时链接;
        • 升级可以通过直接替换共享库文件,而不需要重新编译;
        • 运行时链接可以实现在程序之间共享库函数。
  • 相关阅读:
    poj 2187 Beauty Contest(旋转卡壳)
    poj 2540 Hotter Colder(极角计算半平面交)
    poj 1279 Art Gallery(利用极角计算半平面交)
    poj 3384 Feng Shui(半平面交的联机算法)
    poj 1151 Atlantis(矩形面积并)
    zoj 1659 Mobile Phone Coverage(矩形面积并)
    uva 10213 How Many Pieces of Land (欧拉公式计算多面体)
    uva 190 Circle Through Three Points(三点求外心)
    zoj 1280 Intersecting Lines(两直线交点)
    poj 1041 John's trip(欧拉回路)
  • 原文地址:https://www.cnblogs.com/feng9exe/p/7058534.html
Copyright © 2011-2022 走看看