-dynamic-linker
时间: 2023-09-18 10:07:01 浏览: 82
动态链接器(dynamic linker)是一个系统程序,它在运行时将程序与共享库(shared library)进行连接。它的主要作用是解析程序中引用的符号,并将它们与共享库中的实际地址进行绑定,从而使程序能够正确地调用共享库中的函数和变量。
动态链接器在程序启动时被加载并运行,它负责处理程序中的动态链接操作。它会根据程序中的链接信息和共享库的路径,将程序所需的共享库加载到内存中,并为程序中的每个符号找到对应的实际地址。这样,当程序调用共享库中的函数时,动态链接器就可以根据符号的地址进行跳转,使程序能够正确地执行。
在大多数操作系统中,动态链接器通常是操作系统的一部分,负责处理程序的动态链接需求。它可以通过不同的机制(如符号表、重定位表等)来解析符号和建立符号与实际地址之间的映射关系。
总结来说,动态链接器是一个负责在程序运行时将程序与共享库进行连接的系统程序,它解析程序中引用的符号,并将其与共享库中的实际地址进行绑定,使程序能够正确地调用共享库中的函数和变量。
相关问题
arm-linux-gnueabihf-gcc -Wl,--dynamic-linker=/lib/ld-linux.so.3 -o output input.c动态库的连接是编译器个还是编译后的动态库位置
这个命令是用于将 input.c 编译成可执行文件 output 的。-Wl,--dynamic-linker=/lib/ld-linux.so.3 选项告诉链接器使用/lib/ld-linux.so.3作为动态链接器。这个选项是由编译器传递给链接器的。因此,这个选项是由编译器设置的。
动态库的链接和位置是由链接器完成的,它将可执行文件和动态库链接在一起,生成最终的可执行文件。在链接时,链接器会在指定的路径中查找动态库。默认情况下,链接器会在系统默认的路径中查找动态库。如果动态库在非默认路径中,可以使用-L选项来指定动态库的路径。
因此,动态库的连接是由链接器完成的,但链接器的路径搜索行为可以由编译器和链接器选项来控制。
arm-linux-gnueabihf-gcc -Wl,--dynamic-linker=/lib/ld-linux.so.3 -o my_program my_program.c生成的可执行文件他为啥需要ld_liunx_armfy.so.3
这是因为在编译可执行文件时,链接器ld需要知道程序运行时所需要的动态链接库的位置。动态链接库是在程序运行时才会加载到内存中的,因此需要在程序中指定动态链接库的位置。
在这个命令中,使用了-Wl,--dynamic-linker选项指定了动态链接器的位置为/lib/ld-linux.so.3,这个动态链接器是针对ARM架构的。这个动态链接器会在程序运行时加载到内存中,并且根据程序的需要加载其他的动态链接库。
因此,生成的可执行文件my_program在运行时需要依赖/lib/ld-linux.so.3这个动态链接器。