在linux中链接不同的.so文件

时间:2009-09-10 12:42:47

标签: linux build-process

我正在尝试编译一个具有标准构建过程的软件,例如

configure
make
make install

该软件需要一个库,例如libreq.so安装在/ usr / local / lib中。但是,我的问题是我想构建软件并将其链接到我在/home/user/mylibs.中安装的同一个库的不同版本(我也有库的源代码)。 p>

我的问题是,如何在/ home / user / mylibs中编译和链接软件而不是/ usr / local / lib中的库

我尝试将“LD_LIBRARY_PATH”设置为包含/ home / user / mylibs,但这不起作用。

谢谢!

4 个答案:

答案 0 :(得分:5)

如果您有autoconf配置脚本,请使用:

CPPFLAGS=-I/home/user/include LDFLAGS=-L/home/user/mylibs ./configure ...

这会将指定目录添加到搜索标题的目录列表中(通常在使用库时是必需的),并将另一个指定目录添加到搜索实际库的列表中。

我一直使用这个 - 在我的工作机器上,/usr/local由MIS“维护”并且99.9%的时间包含过时代码(并且是NFS安装的,只读),所以我很挣扎完全避免使用它,并在/usr/gnu下维护我自己的,近乎最新的软件版本。它对我有用。

答案 1 :(得分:2)

尝试将LD_PRELOAD设置为您的实际文件。

答案 2 :(得分:0)

LD_LIBRARY_PATH用于在运行时查找动态链接库。在编译时,您应该将-L参数添加到gcc / g ++以指定* .so文件在哪个目录中。您还需要使用-l< NAME>添加库名称。 (库是libNAME.so)。

重要!对于链接,您不仅需要libNAME.so文件,还需要libNAME.a。

运行应用程序时,不要忘记将dir添加到LD_LIBRARY_PATH。

答案 3 :(得分:0)

/home/user/mylibs添加到LD_LIBRARY_PATH时,是否将其添加到现有路径的前端或末尾?按顺序搜索令牌,因此您希望自己的列表首先出现在列表中。

此外,许多使用configure的标准构建环境将允许您为每个必需的片段指定一个精确的库。您必须运行./configure --help,但您应该看到--using-BLAH-lib=/path/to/your/library或类似内容。