`
mypyg
  • 浏览: 549655 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

动态库的soname

 
阅读更多
-Wl,-soname -Wl 告诉编译器将后面的参数传递到连接器。而 -soname 指定了
共享库的 soname

这个soname的存在是为了兼容方便。

比如:
    有一个程序ap1,以及一个库libtest.so.1
    ap1启动的时候需要libtest.so.1
    如果链接的时候直接把libtest.so.1传给了ap1,那么将来库升级为libtest.so.2的时候,ap1仍然只能使用 libtest.so.1的代码,并不能得到升级的好处。而如果指定了soname为libtest.so,那么ap1启动的时候将查找的就是 libtest.so而不是其在被链接时实际使用的库libtest.so.1这个文件名。
    在开始时我们建立一个链接:ln -sf libtest.so.1 libtest.so
    而在库升级后,我们重新:ln -sf libtest.so.2 libtest.so即可,这样ap1不需要任何变动就能享受升级后的库的特性了。而libtest.so.1,libtest.so.2可以同时存在于系统内,不必非得把libtest.so.2的名字改成libtest.so.1
分享到:
评论

相关推荐

    Linux动态库连接

    - `soname`:动态库的实际名字,如 `libmylib.so.1`,其中 `1` 是版本号。 - `symlink`:例如 `libmylib.so` 是指向 `libmylib.so.1` 的符号链接,方便应用程序链接和更新。 3. **动态库的查找机制** - `LD_...

    linux动态库生成

    在Linux系统中,动态库(Dynamic Library)是程序运行时加载的共享库,可以被多个程序同时使用,节省内存资源并方便代码维护。本篇将详细介绍如何在Linux环境下生成动态库,以及与C语言编程相关的知识。 首先,我们...

    Redis封装动态库

    3. 动态库标志:指定生成动态库的选项,如-g生成调试信息,-shared生成动态库,-Wl,-soname,libredisclient.so.1设置动态库的SONAME。 4. 版本管理:动态库版本号一般由libredisclient.so.1.0.0这样的形式表示,其中...

    Linux下C++动态库

    在Linux系统中,C++动态库(也称为共享对象或.so文件)是程序运行时可以加载和使用的代码库。它们允许多个程序共享同一份代码,从而节省内存并简化软件维护。下面将详细介绍如何创建、使用和管理Linux下的C++动态库...

    需链接动态库静态库,且先需编译库的makefile

    例如,`gcc -shared -o libdynamic.so file3.o -Wl,-soname,libdynamic.so`生成名为`libdynamic.so`的动态库,并设置其儿子名。 4. **链接目标程序**:在`makefile`中,你需要指定链接器如何找到和使用这些库。静态...

    Visual C 编制的Windows动态库移植到Linux.pdf

    【Visual C++ 编制的Windows动态库移植到Linux】专题介绍 动态链接库(DLL)在Windows和Linux操作系统中都是实现代码复用的重要手段,但两者之间存在格式和调用方式的差异,使得直接移植变得复杂。这篇文章主要探讨...

    libsrc.rar_linux 动态库

    5. **设置版本号**:动态库通常有版本号,通过`-Wl,-soname,libmylib.so.1`指定,然后使用`ln -s`创建软链接指向最新版本,如`ln -s libmylib.so.1.0.0 libmylib.so.1`和`ln -s libmylib.so.1 libmylib.so`。...

    静态、动态库创建

    2. **链接生成动态库**:`gcc -g -shared -Wl,-soname,liberr.so.1.0.0 -o liberr.so.1.0.0 liberr.o -lc` 这里使用`-shared`指定生成动态库,`-Wl,-soname,liberr.so.1.0.0`设置链接时的符号名称,便于版本管理。...

    linux静态库和动态库分析

    例如,`gcc -fPIC -c *.c`编译源文件,`gcc -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o`则生成动态库。 库的存在极大地提高了软件开发的效率,因为开发者可以复用他人已经编写并测试过的成熟代码,而...

    Linux-生成动态库工程代码

    在Linux环境中,生成动态库(Dynamic Library)是软件开发中的常见任务,特别是在使用Qt这样的跨平台框架时。Qt是一个功能强大的C++库,用于构建图形用户界面和其他应用程序。本篇文章将详细讲解如何在Linux上使用Qt...

    静态库、共享库、动态库的创建和使用.txt

    ### 静态库、共享库、动态库的创建与使用 #### 一、静态库的理解与使用 **定义:** 静态库(Static Library)是一系列预编译的目标文件(Object Files)的集合,通常以`.a`为扩展名。在程序链接阶段,链接器会根据...

    Linux下动态库的生成和使用

    动态库的基本概念  1. 动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的。...

    linux动态链接库的开发实例

    `soname`(如`libmylib.so.1`)是链接时使用的符号名称,指向实际的库文件。更新库时,可以保留旧版本,避免影响依赖它的程序。 七、动态链接库的移植 由于动态链接库的依赖于系统库和API,因此在不同Linux发行版...

    Linux编程动态库知识

    暂时添加动态库目录LD_LIBRARY_PATH,一般用于测试和开发  4.LD_PRELOAD预加载库。用于提前加载,紧急用途,或是特殊的测试情况  5.创建动态库  gcc -fPIC -shared -Wl,-soname, your_soname -o library_...

    dlib.tar.gz

    此外,为了在不同平台上使用动态库,还需要理解动态链接器的工作原理,如 SONAME 和 RPATH 等概念。 总之,dlib.tar.gz 是一个包含 dlib 库源代码的压缩文件,通过提供的 makefile 脚本,开发者可以轻松地将其编译...

    Linux共享库版本化

    3. **编译旧库**:编译旧库时,通过`-shared`, `-fPIC`等选项生成动态库,并使用`--soname`设置库的SONAME(共享对象名称),如`libfoo.so`。`-Wl,--version-script`选项指定版本脚本,定义导出的符号。例如,`1.ver...

    openssl-android-build:OpenSSL静态和动态库构建脚本。 可以在Qt Android项目中使用

    4. 如果需要动态库,还需要处理soname和版本信息。 5. 最后,将库文件整合到Qt项目中,配置项目的链接器设置。 使用`openssl-android-build-master`压缩包,开发者可以跳过这些复杂的步骤,只需运行脚本即可完成...

    Linux系统下动态连接库的创建和使用.pdf

    3. **连接生成动态连接库**:接下来,使用`gcc`连接目标文件,添加`-shared`选项指定创建动态库,并通过`-Wl,-soname`选项设置库的名称。例如: ``` gcc myfun.o -o libmyfun.so -shared -Wl,-soname,libmyfun.so ...

    Linux C++ 多版本库依赖问题

    Linux的动态库版本管理通常采用SONAME(Shared Object Name),这是一个包含库主版本、次版本和修订版本的标识符,例如`libfoo.so.1.2.3`。在编译库时,编译器会创建一个软链接`libfoo.so`指向当前版本的库,而`...

Global site tag (gtag.js) - Google Analytics