我正在尝试编译一个具有标准构建过程的软件,例如
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,但这不起作用。
谢谢!
答案 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
或类似内容。