Linux动态连接器
参考:Linux动态链接器
Linux加载启动可执行程序的过程(一)内核空间加载ELF的过程
本文和 理解ld-linux.so.2 内容上有点重复
动态链接器——Dynamic Linker
动态链接器既可以直接运行,也可以间接运行
间接运行
动态链接器可以通过一些动态链接的程序(dynamically linked program) 或 共享对象(shared object) 间接运行。对于动态链接器间接运行这种情况,动态链接器的命令行选项没办法传给动态链接的程序 或 共享对象。像ELF这种情况,动态链接器的命令行选项放到了被执行程序的 .interp节中。
直接运行
动态链接器也可以采用如下方式直接运行:
/lib/ld-linux.so.* [OPTIONS] [PROGRAM [ARGUMENTS]]
不同二进制格式处理方式
程序ld.so和ld-linux.so *查找并加载程序需要的共享对象(共享库),为程序运行做准备,然后运行程序。Linux二进制文件需要在运行时动态链接链接,除非在编译期间给予ld命令-static选项。
a.out格式
程序ld.so处理a.out格式的二进制文件。a.out格式是很久以前使用的二进制格式。
ELF格式
ld-linux.so*处理ELF格式的二进制文件,ELF格式在Linux下已流行使用多年。(/lib/ld-linux.so.1用于libl5,/lib/ld-linux.so.2用于glibc2)
ld.so和ld-linux.so*处理二进制文件格式不同,如果相同,两者就具有相同的行为,并支持相同文件和程序,如ldd,ldconfig和/etc/ld.so.conf。
注:libc是C库。基本上,它包含大多数程序在Linux上运行所需要的系统功能。 同时,它也包含很多C运行时库中的东西。libc6和glibc是相同的版本libc。官方的说法,它是GNU C库的第2版(但它是Linux C库的第六个主要版本)。目前用于Linux的libc有如下版本libc4,libc5,libc6。更多介绍参考:What's the difference between glibc and libc6?
共享对象依赖关系解析
在解析共享对象依赖关系时,动态链接器首先检查依赖关系字符串,看它是否包含斜杠。
如果找到斜线,那么 依赖项字符串被解释为(相对或绝对)路径名,然后用哪个路径名加载共享对象。
如果找不到斜杠,则按如下顺序搜索:
1.编译目标代码时指定的动态库搜索路径;
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib 或 /lib64;
5.默认的动态库搜索路径/usr/lib 或 /usr/lib64。
Linux动态连接器的更多相关文章
- linux动态库加载RPATH, RUNPATH
摘自http://gotowqj.iteye.com/blog/1926771 linux动态库加载RPATH, RUNPATH 链接动态库 如何程序在连接时使用了共享库,就必须在运行的时候能够找到共 ...
- .netcore在linux下使用P/invoke方式调用linux动态库
http://www.mamicode.com/info-detail-2358309.html .netcore下已经实现了通过p/invoke方式调用linux的动态链接库(*.so)文件 1 ...
- linux动态库默认搜索路径设置的三种方法
众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/lib .动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库, 并且该动态库还未加载到内存中,则系统会自动到这两 ...
- 再探Linux动态链接 -- 关于动态库的基础知识
在近一段时间里,由于多次参与相关专业软件Linux运行环境建设,深感有必要将这些知识理一理,供往后参考. 编译时和运行时 纵观程序编译整个过程,细分可分为编译(Compiling,指的是语言到平台 ...
- 技巧:Linux 动态库与静态库制作及使用详解
技巧:Linux 动态库与静态库制作及使用详解 标准库的三种连接方式及静态库制作与使用方法 Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 L ...
- Linux 动态库剖析
进程与 API 动态链接的共享库是 GNU/Linux® 的一个重要方面.该种库允许可执行文件在运行时动态访问外部函数,从而(通过在需要时才会引入函数的方式)减少它们对内存的总体占用.本文研究了创建和 ...
- linux动态库编译和使用
linux动态库编译和使用详细剖析 引言 重点讲述linux上使用gcc编译动态库的一些操作.并且对其深入的案例分析.最后介绍一下动态库插件技术, 让代码向后兼容.关于linux上使用gcc基础编译, ...
- Android NDK开发及调用标准linux动态库.so文件
源:Android NDK开发及调用标准linux动态库.so文件 预备知识及环境搭建 1.NDK(native development Kit)原生开发工具包,用来快速开发C.C++动态库,并能自动 ...
- Linux动态频率调节系统CPUFreq之三:governor
在上一篇文章中,介绍了cpufreq的core层,core提供了cpufreq系统的初始化,公共数据结构的建立以及对cpufreq中其它子部件提供注册功能.core的最核心功能是对policy的管理, ...
随机推荐
- Flink FileSink 自定义输出路径——BucketingSink
今天看到有小伙伴在问,就想着自己实现一下. 问题: Flink FileSink根据输入数据指定输出位置,比如讲对应日期的数据输出到对应目录 输入数据: 20190716 输出到路径 20190716 ...
- LeetCode_206. Reverse Linked List
206. Reverse Linked List Easy Reverse a singly linked list. Example: Input: 1->2->3->4-> ...
- 【超分辨率】—图像超分辨率(Super-Resolution)技术研究
一.相关概念 1.分辨率 图像分辨率指图像中存储的信息量,是每英寸图像内有多少个像素点,分辨率的单位为PPI(Pixels Per Inch),通常叫做像素每英寸.一般情况下,图像分辨率越高,图像中包 ...
- 正确删除k8s版本jenkins的pod
1.kubectl delete -f jenkins-deployment.yaml 或者先删除pod,再删除对应的depllyment 这两步都要执行否则删除pod不管用 2.删除数据目录下的数据 ...
- docker进入容器内部执行命令
[root@bogon ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 38a2cae4c32f jenk ...
- CF1197D Yet Another Subarray Problem
思路: 使用动态规划,在经典的最大子段和解法基础上进行扩展.dp[i][j]表示以第i个数为结尾,并且长度模m等于j的所有子段的最大cost. 实现: #include <bits/stdc++ ...
- [OpenCV开发]OpenCV图像编码和解码 imencode和imdecode使用,用于网络传输图片
在很多应用中,经常会直接把图片的二进制数据进行交换,比如说利用 socket 通信传送图片二进制数据,或者直接用内存数据库(例如 Redis)来传递图片二进制数据. 这个时候,当你的应用程序读到内存里 ...
- idea安装阿里云插件和sonar插件
重启idea
- DataGridView中的Combobox的应用
在WinForm中DataGridView可谓是应用比较多的数据显示控件了,DataGridView中可以应用各种控件,关于这样的文章网上 已有很多.都是实例化一个控件然后通过DataGridView ...
- [转帖]Nginx Image Module图片缩略图 水印处理模块
Nginx Image Module图片缩略图 水印处理模块 https://www.cnblogs.com/jicki/p/5546972.html Nginx Image Module图片缩略图 ...