• 深入理解计算机操作系统——第7章:静态链接


    链接

    (1)链接是将各个代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可以被加载在存储器上执行。

    链接执行时期:

    (2)链接可在编译时执行:源代码被翻译成机器代码时

    (3)链接可在加载时执行:也就是程序被加载器加载到存储器并执行时。

    (4)甚至可以在运行时:由应用程序来执行。

    链接好处:

    (5)链接使得分离编译成为了可能,可以将一个大型的应用程序分成一个个小的模块,从而可以单独的修改,编译,

           这些模块,当需要修改某个模块时,只需要重新编译这个模块,再链接就可以了。而不需要编译整个应用程序。

    7.1 编译器驱动程序

    例如:有文件mian·c  和文件swap·c  运行>>gcc -02 -g -o p main.c swap.c发生如下过程

    预处理器:cpp   编译器cc1   汇编器as  连接器ld

    (1)将mian·c通过预处理器到mian·i (ascii码中间文件),通过编译器到mian·s(ascii码汇编语言文件),

           通过汇编器到mian·o(可重定位目标文件)

    (2)与上面一样将swap·c做同样的处理。

    (3)通过链接器,将mian·o和swap·o和一些必要的系统文件组合起来,创建一个可执行目标文件p

    >>./p   这样就可以将文件p加载执行了。

    7.2  静态链接:

    (1)以可重定位目标文件和命令行参数作为输入,生成一个完全链接的可加载和运行的可执行目标文件。

    链接器主要的两个任务:

    (2)符号解析:将每一个符号引用刚好和符号定义联系起来。

    (3)重定位:编译器和汇编器生成的是从0开始编址的代码和数据节,链接器通过把每一个符号定义与一个存储器位置

           联系起来,然后修改这些符号的引用,从而来重定位这些节。

    7.3 目标文件

    目标文件纯粹是字节块的集合

    (1)可重定位目标文件

    (2)可执行目标文件

    (3)可共享目标文件。

  • 相关阅读:
    flex4.5 + .net4.0 以二进制方式上传图片
    Flex 使用wigdet组件库 实现自定义事件 派发 和 监听
    flex4.5生成验证码
    转载:区分浏览器关闭和刷新
    访问远程sqlsever 2000服务器设置
    CSS实现三角形
    android SQLite 数据库打开要记得关闭
    在android项目里使用自带的SQLite数据库
    解决使用 JDK 1.7 对 Android apk 签名后程序无法安装的问题
    sina app engine 新浪云计算平台,完备的PHP+MySQL开发平台
  • 原文地址:https://www.cnblogs.com/yanliang12138/p/4726167.html
Copyright © 2020-2023  润新知