Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux中链接到不同的.so文件_Linux_Build Process - Fatal编程技术网

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

在linux中链接到不同的.so文件,linux,build-process,Linux,Build Process,我正在尝试编译一个软件,它有标准的构建过程,例如 configure make make install 软件需要一个库,例如libreq.so,它安装在/usr/local/lib中。但是,我的问题是,我想构建软件,并将其与安装在/home/user/mylibs中的同一个库的不同版本相链接(我也有库的源代码) 我的问题是,如何编译软件并将其链接到/home/user/mylibs中的库,而不是/usr/local/lib中的库 我尝试将“LD_LIBRARY_PATH”设置为包含/home

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

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

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

我尝试将“LD_LIBRARY_PATH”设置为包含/home/user/mylibs,但没有成功


谢谢

尝试使用设置到实际文件。

当您有一个
autoconf
配置脚本时,请使用:

CPPFLAGS=-I/home/user/include LDFLAGS=-L/home/user/mylibs ./configure ...
这会将指定目录添加到搜索标题的目录列表中(在使用库时通常是必需的),并将其他指定目录添加到搜索实际库的列表中


我一直在使用它——在我的工作机器上,
/usr/local
由MIS“维护”,99.9%的时间都包含过时的代码(并且是NFS挂载的,只读的),所以我努力避免使用它,并在
/usr/gnu
下维护我自己的、更接近最新的软件版本。它适合我。

LD\u LIBRARY\u路径用于在运行时查找动态链接库。在编译时,您应该向gcc/g++添加-L参数,以指定*.so文件位于哪个目录中。您还需要使用-l添加库名(其中库名为libNAME.so)

重要!要进行链接,不仅需要libNAME.so文件,还需要libNAME.a


运行应用程序时,不要忘记将目录添加到LD_库路径。

/home/user/mylibs
添加到LD_库路径时,是否将其添加到现有路径的前端或末端?将按顺序搜索标记,以便您希望您的标记首先出现在列表中


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

谢谢,但这似乎不会覆盖构建过程中的/usr/local/lib版本,是否有一些参数可以传递给配置,以告诉它在特定位置使用库?@重要!要进行链接,不仅需要libNAME.so文件,还需要libNAME.a。->你不是在说windows(.dll+.lib)吗。是一个静态库,根本不需要。