zoukankan      html  css  js  c++  java
  • binary hacks读数笔记(共享库)

      共享库从文件结构上来讲,与共享对象没什么区别。Linux下,共享库就是普通的ELF共享对象。

    1、共享库命名:

      libname.so.x.y.z :其中最前面使用前缀lib,中间是库的名字和后缀“so”。最后三个数字组成的是版本号。其中,“x”表示主版本号,“y”表示次版本号,"z"表示发布版本号。

    2、SO-NAME:

      共享库主版本号与次版本号决定了一个共享库的接口。对于Linux系统来说,普遍采用一种叫做SO-NAME的命名机制来记录共享库依赖关系。每个共享库都有一个对应的"SO-NAME"。这个SO-NAME即为共享库的文件名去掉次版本号和发行版本号,保留主版本号。比如一个共享库为libfoo.so.2.6.1,那么它的SO-NAME为libfoo.so.2。在linux系统中,系统会为每个共享库在它所在目录创建一个跟SO-NAME相同的并且指向它的软链接。以SO-NAME创建的软链接会指向目录中主版本号相同、次版本号和发行版本号最新的共享库。

    3、链接名

      当我们在编译使用共享库时,为了使用的简洁,比如链接一个libXXX.so.2.6.1共享库,只需要在编译相关命令中指定-lXXX即可。编译器会根据当前环境,在系统相关路径(往往由-L参数指定)查找最新版本"XXX"库。

      “XXX”又称为共享库链接名。不同类型的库可能会有同样的类型名。例如静态库libc.a与动态库libc.so.2.6.1。因而利用ld的-static参数时,“-lc”会查找到libc.a; 若使用-Bdynamic  “-lc”则会查找到libc.so.2.6.1。

    4、共享库路径:

      一般一个系统中主要有3个存放共享库的路径。

    a、/lib 这个位置主要存系统最关键和基础的共享库。比如动态链接器、c语言运行库等

    b、/usr/lib 这个位置主要放一些非系统运行时所需关键库。

    c、/usr/local/lib 这个目录位置放置一些与系统本身并不十分相关的库。

     

      

  • 相关阅读:
    ubuntu下文件安装与卸载
    webkit中的JavaScriptCore部分
    ubuntu 显示文件夹中的隐藏文件
    C语言中的fscanf函数
    test
    Use SandCastle to generate help document automatically.
    XElement Getting OuterXML and InnerXML
    XUACompatible meta 用法
    Adobe Dreamweaver CS5.5 中文版 下载 注册码
    The Difference Between jQuery’s .bind(), .live(), and .delegate()
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/10655707.html
Copyright © 2011-2022 走看看