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

  • 相关阅读:
    Docker Harbor安装和使用
    k8s部署使用Jenkins
    K8S之Deployment
    K8S之StatefulSet
    Gitlab数据迁移和版本升级
    centos7 编译安装git工具
    K8S之secret
    SonarQube的安装和使用
    Jenkins常用构建工具
    el-upload上传/预览时dialog宽自适应
  • 原文地址:https://www.cnblogs.com/mikeguan/p/6875621.html
Copyright © 2011-2022 走看看