当前位置: 首页 > 知识库问答 >
问题:

Linux如何在有多个动态库时指定动态库

通迪
2023-03-14

我正在开发一个共享库,在我的机器上可能有同一个共享库的两个副本:

  1. 我安装到系统路径的一个:usr/lib/libmyproject。所以

所以在我的开发过程中,在/home/ziqi下有一些可执行文件。刘/workspace/myproject/build。我希望他们使用/home/ziqi中的动态库。liu/workspace/myproject/build/src/libmyproject。然而,事实证明他们实际上在使用usr/lib/libmyproject。因此,当我使用ldd检查链接库时。

当有多个时,是否有指定要使用哪个动态库?如果我可以为“此项目”下的所有可执行文件指定此项会更好,因为在我刚刚构建的同一个存储库中链接动态库非常直观,而不是安装到系统路径的存储库。

更新:我发现了这篇文章:可执行文件在运行时在哪里寻找共享对象?

动态库搜索似乎与环境变量有关。

我想要的是首先搜索rpath,然后搜索LD\u LIBRARY\u PATH。

根据rpath wiki的说法,rpath被命名为DT_RPATH,但是当我客观转储那个可执行文件时,我唯一能找到的就是RUNPATH部分。我不确定这是否是编译器特定的行为...(我正在运行g(Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0


共有2个答案

夹谷承安
2023-03-14

只需修改LD\u LIBRARY\u路径,然后将主文件夹放在第一位,如

export LD_LIBRARY_PATH=/home/ziqi.liu/workspace/myproject/build/src/:${LD_LIBRARY_PATH}

那就好了。

罗建弼
2023-03-14
匿名用户

当存在多个动态库时,是否需要指定要使用哪个动态库?

实现这一点的最佳方法是在可执行文件中使用特殊的标记。

假设您有$D/build/exe并且您希望exe使用$D/build/src/libmyproject.so,将您的exe链接为:-rpath'$ORIGIN/src'

这将允许您拥有多个构建目录(例如“release”和“debug”构建),每个二进制文件将从自己的构建树中提取库。

它还允许您不安装libmyproject。因此,您可以将二进制文件和所有必需的库保存在例如/usr/local/$project/{bin/exe,lib/libmyproject.so}中,并使其全部正常工作(TM)。

请参见此答案。

 类似资料:
  • 问题内容: 我一直在评估django,并想知道以下情况是否可能。我已经看过常规的多个数据库文档,所以请不要指向我,因为据我所知,并没有提到该用例。如果我错了,我把它拿回来:) 我想要一个主数据库,我的大多数应用程序模型都将驻留在其中,但是该应用程序之一将需要动态创建数据库,这些数据库将是客户特定的数据库。 数据库路径(我计划使用sqlite)将存储在主数据库中,因此需要更改游标,但模型将保持不变。

  • 本文向大家介绍Linux静态库与动态库实例详解,包括了Linux静态库与动态库实例详解的使用技巧和注意事项,需要的朋友参考一下 Linux静态库与动态库实例详解 1. Linux 下静态链接库编译与使用 首先编写如下代码: 然后编译: 1. gcc -c test.c //生成目标文件 2. ar crv libtest.a test.o //生成静态链接库libtest.a 3. g++ -o

  • mysocketclient.c #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> #include "itcastlog.h" typedef struct _SCK_HANDLE { char version[64]; char i

  • 我是新的登录,我试图添加文件路径动态,与属性文件,为windows和Linux。 下面是我的代码sinppet,我如何获得${MY_HOME}的值

  • 问题内容: 这是使用g ++ 进行动态共享库编译的后续版本。 我正在尝试在Linux上的C++中创建一个共享的类库。当我尝试使用库中定义的类时,我的问题开始了。我链接到的第二篇教程展示了如何加载用于创建库中定义的类的对象的符号,但是没有_使用_ 这些对象来完成任何工作。 有谁知道用于创建共享C ++类库的更完整的教程,该教程还显示了如何在单独的可执行文件中 使用 这些类?一个非常简单的教程,显示了

  • CGO在使用C/C++资源的时候一般有三种形式:直接使用源码;链接静态库;链接动态库。直接使用源码就是在import "C"之前的注释部分包含C代码,或者在当前包中包含C/C++源文件。链接静态库和动态库的方式比较类似,都是通过在LDFLAGS选项指定要链接的库方式链接。本节我们主要关注在CGO中如何使用静态库和动态库相关的问题。 2.9.1 使用C静态库 如果CGO中引入的C/C++资源有代码而