如何在 CentOS 中安装自定义的 boost 版本?

如何在 CentOS 中安装自定义的 boost 版本?

我正在尝试编译和安装促进1.54 来自 CentOS 的源代码。

该文档非常简单,并且互联网上有大量可用的教程(1) (2) (3)。这就是我所做的:

wget http://sourceforge.net/projects/boost/files/boost/1.54.0/boost_1_54_0.tar.gz
tar -xzvf boost_1_54_0.tar.gz
cd boost_1_54_0
./bootstrap.sh --prefix=/usr/local
./b2 install --with=all

这是正确编译和安装 boost 的,/usr/local/lib一切看起来都很好。

现在我编译其他需要使用 boost 的软件gcc,一切正常。根据我的理解,只要gcc找到所需的库,一切都应该没问题。

但现在的问题是:如果我运行编译的二进制文件,我会收到以下错误:

./myProgram
  ./myProgramm: error while loading shared libraries: libboost_system.so.1.54.0: cannot open shared object file: No such file or directory

为什么找不到库?

另外我尝试过:

ldconfig
locate boost
  [...]

但是找不到boost库。我手动查找了路径,它是:

/usr/local/lib/libboost_system.so.1.54.0

我还尝试创建符号链接,/usr/lib但这也无法解决此问题。

有任何想法吗?我能做些什么?

答案1

您必须在编译程序时添加-Wl,-R/usr/local/lib到。LDFLAGS

-R是一个链接器选项(用于指定运行时链接器路径) --Wl指示gcc将其传递给ld.

对于共享库,您必须确保链接器在编译期间找到它们在运行时(参见标志-L-R)。

您可以使用

$ ldd myProgramm

验证运行时链接器路径是否设置正确,即是否可以在程序启动时找到所需的共享库/它将加载哪些共享库。

答案2

作为解决方法,我相信您可以使用环境变量为可执行文件的运行添加前缀LD_LIBRRAY_PATH,并为其指定包含该库的目录的路径.so

例子

$ LD_LIBRARY_PATH=/usr/local/lib ./myProgram

但听起来您用来编译相关应用程序的方法不正确。我需要看看你的编译方法才能myProgram更具体。

答案3

使用以下命令在 CentOS 7 中安装 boost 1.54 版本:

sudo wget http://repo.enetres.net/enetres.repo -O /etc/yum.repos.d/enetres.repo

从以下链接下载 lib64icu42-4.2.1-1mdv2010.0.x86_64.rpm: ftp://fr2.rpmfind.net/linux/Mandriva/official/2010.0/x86_64/media/main/release/lib64icu42-4.2.1-1mdv2010.0.x86_64.rpm

安装 RPM:

sudo rpm -ivh lib64icu42-4.2.1-1mdv2010.0.x86_64.rpm

安装所需的boost库版本:

sudo yum install boost-devel-1.54.0

就是这样。祝你有美好的一天!

转链接: https://www.rpmfind.net/linux/rpm2html/search.php?query=libicuuc.so.42()(64位)

相关内容