zoukankan      html  css  js  c++  java
  • 链接详解--共享库命名

    按照共享库的命名惯例,每个共享库有三个文件名:real name,soname和linker name。

    soname是一个符号链接的名字,只包含共享库的主版本号,主版本号一致即可保证库函数的接口一致,

    因此应用程序的.dynamic段只记录共享库的soname,只要soname一致,这个共享库就可以用。

    使用共享库可以很方便地升级库文件而不需要重新编译应用程序,这是静态库没有的优点。

    注:libc的版本号有一点特殊,libc-2.8.90.so的主版本号是6而不是2或2.8。

    linker name仅在编译链接时使用,gcc的-L选项应该制定linker name所在的目录。

    有的linker name是库文件的一个符号链接,有的是一段链接脚本(libc.so)。

    示例:

    real name:/lib/i386-linux-gun/libc-2.15.so

    softname: /lib/i386-linux-gun/libc.so.6

    linker name: /usr/lib/i386-linux-gun/libc.so

    gcc -shared -Wl,soname,libstack.so.1 -o libstack.so.1.0 stack.o push.o pop.o is_empty.o

    这样编译生成的库文件是libstack.so.1.0,是real name,soname是libstack.so.1。

    需要首先创建linker name:

    ln -s libstack.so.1.0 libstack.so

    程序编译需要linker name,程序执行需要soname,最终指向real name。

  • 相关阅读:
    bzoj 2618: [Cqoi2006]凸多边形
    BZOJ 4556 [Tjoi2016&Heoi2016]字符串
    BZOJ 4850 [Jsoi2016]灯塔
    BZOJ 2956: 模积和
    PHP 正则表达式
    Linux Centos6.5安装redis3.0 和phpredis
    linux 删除过期文件
    THINKPHP报错 _STORAGE_WRITE_ERROR
    THINKPHP 部署nginx上URL 构造错误
    Linux 修改mysql密码
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/4880966.html
Copyright © 2011-2022 走看看