什么是编程中的动态链接器
What is dynamic linker in programming?
我混淆了链接器概念
- 我们可以在Java中使用链接器吗?
- 如果是这样,链接如何在安卓开发中发生?
链接器是一个程序,它采用单个编译文件并将它们组合成单个可执行程序。
假设您有一个包含两个文件的程序:一个具有启动程序的 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++方式靠拢。这意味着,在运行应用程序之前完成编译和链接。
- g++用户定义的动态链接库上的全局new和delete运算符
- 如何使用C++导出制作动态链接库
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 动态链接库中C++回调函数
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 如何动态链接 grpc 库 c++?
- 调用函数一次用于动态链接库,一次从可执行文件调用函数
- 将函数传递给动态链接库
- aarch64动态链接器rpath使用辅助依赖链接
- 动态链接-Linux与Windows
- 如何将动态链接库与CMake一起使用
- 使用动态链接从.dll库调用函数
- 静态链接 Visual Studio dll 到动态链接的 sfml 项目
- 从另一个动态链接库项目调用静态库函数
- JNI 不满意链接错误: 动态链接库 (DLL) 初始化例程失败
- 使用 GCC 的静态和动态链接
- 静态链接MSVC库,动态链接Qt
- 在动态链接中,.exe如何知道在更新库时在哪里搜索库?
- 如何强制Windows.h在Visual Studio中静态链接而不是动态链接?
- 对应于 stdio.h 的库文件是动态链接还是静态链接