链接

作者: 一块大番薯 | 来源:发表于2018-03-22 16:11 被阅读6次

原文

1. 编译系统

预处理阶段:处理以 # 开头的预处理命令;
编译阶段:翻译成汇编程序;
汇编阶段:将汇编程序翻译可重定向目标程序,它是二进制的;
链接阶段:将可重定向目标程序和 printf.o 等单独预编译好的目标文件进行合并,得到最终的可执行目标程序。


编译系统

2. 目标文件

可执行目标文件:可以直接在内存中执行;
可重定向目标文件:可与其他可重定向目标文件在链接阶段合并,创建一个可执行目标文件;
共享目标文件:可以在运行时被动态加载进内存并链接;

3. 静态链接

输入是一组可重定向目标文件,输出是一个完全链接的可执行目标文件。链接器主要完成以下两个任务:

  1. 符号解析:将每个符号引用与一个符号定义关联起来。每个符号对应于一个函数、一个全局变量或一个静态变量。
  2. 重定位:将每个符号定义与一个内存位置关联起来。

4. 动态链接

静态库有以下两个问题:

  • 当静态库更新时那么整个程序都要重新进行链接;
  • 对于 printf 这种标准函数库,如果每个程序都要有代码,这会极大浪费资源。

共享库是为了解决静态库的这两个问题而设计的,在 Linux 系统中通常用 .so 后缀来表示,Windows 系统上它们被称为 DLL。它具有以下特点:

  • 在给定的文件系统中一个库对于一个 .so 文件。
  • 引用该库的可执行目标文件都共享这个文件,它不会被复制到引用它的可执行文件中。
  • 在内存中,一个共享库的 .text 节的一个副本可以被不同的正在运行的进程共享。

相关文章

  • 链接自己,链接心,链接世界

    PART-1 角色:客户 主题:自己觉知到了自己的状态,但还是在那个低落的情绪状态里无法反弹 我的制約:不自觉的切...

  • 链接未来,链接世界

    这几年,对新工具的探索一直没有停下过思考。消费者对新工具的接受程度越来越高,当行业门槛进一步提高,准入标准一步步提...

  • 硬链接、软链接

    硬链接:为磁盘上的一个文件创建了一条新路径,此时就有两条路径指向该文件。当所有指向该文件的的路径被删除掉之后,该文...

  • 长链接学习链接

    php之websocket服务使用(弹幕实现) https://blog.csdn.net/miao091...

  • 弱链接,强链接

    最近在联系儿子上学的事情,动用了强链接和弱链接两种关系。 每个人,只要参与社会生活,就会拥有强连接和弱连接。 强链...

  • 链接世界 链接价值

    近日,一场主题与产业链供应链有关的国际论坛在浙江杭州市举行,来自全球29个国家以及多个国际组织的代表以线上线下相结...

  • 链接

    享受此刻的宁静 凝望窗外 竟然链接到了你的能量 欣喜 幸福 渴望 我知道 你在默默的守护 就如同看到当下的我 您的...

  • 链接

    越简单直接的人,越容易和别人连接。

  • 链接

    我的父母以前是地地道道的农民,我跟他们都链接很少,我以前是一个特别内向的人,他们给我的压力很大,经常被他们打骂,从...

  • 链接

    《链接》作者艾伯特-拉斯洛·巴拉巴西是科学界的一位巨星,全球复杂网络研究第一人,无尺度网络模型的创立者。他的论文被...

网友评论

    本文标题:链接

    本文链接:https://www.haomeiwen.com/subject/qdbaqftx.html