• 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

  • 相关阅读:
    Jdk 1.6 在线 API 中文版
    数据库的最简单实现
    互联网公司GitHub repo 语言使用情况
    Chrome浏览器查看 iframe信息 OpenFrame
    PostgreSQL 保存json,jsonb类型
    修改PS1变量
    postgres json
    PostgreSQL PL/Python 和 PL/Postgres 函数互相调用
    转:CentOS 6.x 挂载读写NTFS分区(fuse-ntfs-3g)
    CentOS 7 设置静态IP
  • 原文地址:https://www.cnblogs.com/mikeguan/p/6875621.html
Copyright © 2020-2023  润新知