我正在尝试编译和安装促进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位)