参考自: <<程序员的自我修养--链接、装载与库>> 第八章 Linux共享库的组织

以下截取部分内容 (这本书比较好的讲解了从程序的链接,装载,到运行)

共享库的兼容性

linux下的共享库就是普通的ELF共享对象

更改类型 兼容性
往共享库 Hbfoo.so里面添加一个导出符号 foo2 兼容
删除共享库libfoo.so里面一个原有的导出符号 foo 不兼容
将libfoo.so给一个导出函数加一个参数,比如原来的foo(int a)变成了foo(int a,int b) 不兼容
删除一个导出函数中的一个参数,如原来的foo(int a, int b)变成了 foo(int a) 不兼容
如果一个结构类型被用于一个导出函数或导出全局变量,那么改变结构类型的长度、 内容、成员类型,如libfoo.so有导出函数foo(struct bar b),而bar的结构被改变 不兼容
修正一个导出函数中的bug, 或者改进某个导出函數的性能,但是不改变导出函数的语义、功能,行为和接口类型 兼容
修正一个导出函数中的bug, 或者改进某个导出函数的性能, 但是同时改变了导出函数的语义、功能、行为或接口类型 不兼容

共享库的版本命名

lib 主版本号 次版本号 发布版本号 .so

共享库中的符号版本

GLIBC_2.0 GLIBC_2.6

共享库系统路径

/lib
/usr/lib
/usr/local/lib

共享库查找过程

  1. 由 LD_LIBRARY_PATH 指定
  2. 由/etc/ld.so.cache 指定
  3. 默认共享库 先/usr/lib 然后/lib

环境变量及共享库的创建

LD_LIBRARY_PATH
LD_PRELOAD
LD_DEBUG

ldconfig -n sharede_library_directory

linux共享库加载的更多相关文章

  1. linux动态库加载RPATH, RUNPATH

    摘自http://gotowqj.iteye.com/blog/1926771 linux动态库加载RPATH, RUNPATH 链接动态库 如何程序在连接时使用了共享库,就必须在运行的时候能够找到共 ...

  2. Linux 动态库加载

    动态库运行时搜索顺序 1.LD_PRELOAD LD_PRELOAD是一个环境变量,用于动态库加载,动态库加载的优先级最高: 2.-wl,-rpath 编译目标代码时指定的动态库搜索路径(指的是用-w ...

  3. 【转载】Linux下动态共享库加载时的搜索路径详解

    转载自:http://www.eefocus.com/article/09-04/71617s.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading ...

  4. Linux下动态共享库加载及使用详解【转】

    原文地址:http://blog.chinaunix.net/uid-29025972-id-3855500.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while l ...

  5. Linux下动态共享库加载时的搜索路径详解

    对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径 ...

  6. Linux下动态共享库加载及使用详解

    转载;http://blog.chinaunix.net/uid-29025972-id-3855500.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loa ...

  7. <摘录>Linux下动态共享库加载时的搜索路径详解

    对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径 ...

  8. linux动态库加载的秘密

    摘自http://gotowqj.iteye.com/blog/1926734 摘自http://www.360doc.com/content/14/0313/13/12747488_36024641 ...

  9. linux动态库加载时搜索路径

    摘自http://gotowqj.iteye.com/blog/1926613 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared librar ...

随机推荐

  1. weex 学习

    相关资料和链接: # 官方网站https://weex.apache.org/cn/ # githubhttps://github.com/apache/incubator-weex # weex环境 ...

  2. Struts2 入门篇

    Struts2简介 Struts2 是一个开源.免费的Web框架 官网:http://struts.apache.org/ Struts2.5.2新版本搭建环境更新 导入jar包,必备jar包如下:尤 ...

  3. 安卓手机的后门控制工具SPADE

    SPADE,一款安卓手机的后门控制工具,安全研究人员可以以此了解和研究安卓后门原理. 首先,我们从网站www.apk4fun.com下载apk文件,如ccleaner.然后,我们安装spade git ...

  4. eclipse配置jp.gr.java_conf.ussiy.app.propedit_5.3.3

    配置PropertiesEditor插件 jp.gr.java_conf.ussiy.app.propedit_5.3.3   1.下载PropertiesEditor插件 http://pan.ba ...

  5. STM32F103RCT6移植到STM32F103C8T6注意事项

    1,修改IC为STC32F103C8 2,修改晶振为8.0M 3,修改C/C++宏定义,由STM32F10X_HD,USE_STDPERIPH_DRIVER 改为 STM32F10X_MD,USE_S ...

  6. Asp.Net mvc4 项目 在vs中调试正常 在IIS发布后连接oracle数据库时提示数据库连接关闭

    解决办法: 1.打开iis,找到发布的程序 2.右键单击“TAKANAPP” 从右键菜单选择“管理应用程序”--“高级设置....” 在打开的高级设置  面板 查看对应的应用程序池 名称 3.设置应用 ...

  7. zookeeper(二): Curator vs zkClient

    目录 zookeeper Curator zkClient 客户端对比 写在前面 1.1. zookeeper应用开发 1.1.1. ZkClient简介 1.1.2. Curator简介 写在最后 ...

  8. lua2json

    lua对象json序列化,很简单,没做中文的unicode编码了 local function bool2json(v) return v and "true" or " ...

  9. Linux安装python3.7.2详细操作步骤

    1.下载Python依赖环境 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ...

  10. 记一次Net软件逆向的过程(经典)

    查壳 1.先看下目录结构: 2.查下,是什么语言 ==> Net的,那不用说了,肯定能破解(毕竟是老本行嘛~) 混淆与反混淆 3.dnSpy打开后发现很多变量是乱码 4.用de4dot跑一波 5 ...