zoukankan      html  css  js  c++  java
  • linux共享库加载

    参考自: <<程序员的自我修养--链接、装载与库>> 第八章 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

  • 相关阅读:
    基于select的IO多路复用并发模型
    (p ython +tcp+tcp)文件传输
    udp协议与进程结合(群聊)
    python递归拷贝目录和线程拷贝目录
    利用线程对文件进行分割
    tcp与线程结合
    tcp 文件传输
    mysql数据库 (使用) 测试题
    json写入文件
    ArcEngine——获取要素几何(非游标方式)
  • 原文地址:https://www.cnblogs.com/mikeguan/p/6875621.html
Copyright © 2011-2022 走看看