什么是编程中的动态链接器

What is dynamic linker in programming?

本文关键字:动态 链接 编程 什么      更新时间:2023-10-16

我混淆了链接器概念

  1. 我们可以在Java中使用链接器吗?
  2. 如果是这样,链接如何在安卓开发中发生?

链接器是一个程序,它采用单个编译文件并将它们组合成单个可执行程序。

假设您有一个包含两个文件的程序:一个具有启动程序的 main 函数,另一个定义一个帮助程序函数。当编译器处理主文件时,它将生成调用帮助程序函数的代码,而实际上不知道它是否存在或它的作用。然后链接器接管并"解析"函数调用,以便在程序运行时输入正确的函数。

基本上有两种类型的链接器:

  • 静态链接器在执行之前运行,生成可加载和运行的完全链接的可执行文件作为输出。
  • 执行可执行文件时运行动态链接器,在不同的库中查找所需的符号。

通常,链接器概念仅适用于操作系统级别的本机代码。如果你想把它应用到Java,你可以说它只使用动态链接;链接器集成到 JVM 中。

链接器是一种计算机程序,它采用编译器生成的一个或多个目标文件,并将它们组合到单个可执行程序中。计算机程序通常由几个部分或模块组成;这些部件/模块不需要全部包含在单个目标文件中,在这种情况下,它们通过符号相互引用。当程序包含多个对象文件时,链接器将这些文件组合成一个统一的可执行程序,并在此过程中解析符号。

许多操作系统环境允许动态链接,即推迟解析某些未定义的符号,直到程序运行。这意味着可执行代码仍然包含未定义的符号,以及将为这些符号提供定义的对象或库的列表。加载程序也将加载这些对象/库,并执行最终链接。动态链接不需要链接器。

"链接器"在Java世界中没有任何意义。类加载器的概念 - 给定一个java字节代码数组可以创建类的内部表示,这在以前是正确的。现在Java 9有链接器

当Java编译器运行时,它会为程序中的每个类或接口生成一个单独的字节码文件(扩展名为*.class(。此文件彼此建立符号连接,并且是 Java API 的类文件。

在运行时,Java 虚拟机加载程序文件,并在称为动态链接的过程中将它们组合在一起。

与C/C++不同,链接步骤在Java中@runtime通过JVM处理(懒惰或急切(。所以没有像Java链接器这样的东西。JVM负责它。

Android中,在Lollipop之前,JVM负责链接。在AOT出现(提前编译(之后,这些东西开始向C/C++方式靠拢。这意味着,在运行应用程序之前完成编译和链接。