caffe无法找到libboost_system.so.166.0

时间:2018-02-08 00:08:11

标签: boost shared-libraries caffe

我使用boost 1.66在Ubuntu 17.04系统上安装caffe。我可以毫无问题地执行make allmake test

me@icvr1:~/PackageDownloads/caffe$ make all
make: Nothing to be done for 'all'.
me@icvr1:~/PackageDownloads/caffe$ make test
make: Nothing to be done for 'test'.

但是,当我尝试make runtest时,我收到以下错误:

me@icvr1:~/PackageDownloads/caffe$ make runtest
.build_release/tools/caffe
.build_release/tools/caffe: error while loading shared libraries: libboost_system.so.1.66.0: cannot open shared object file: No such file or directory
Makefile:532: recipe for target 'runtest' failed
make: *** [runtest] Error 127

现在,我知道libboost_system.so.1.66.0中存在/usr/local/lib,我相信这是一个相当标准的位置:

me@icvr1:~/PackageDownloads/caffe$ ls /usr/local/lib/libboost_system*
/usr/local/lib/libboost_system.a  /usr/local/lib/libboost_system.so  /usr/local/lib/libboost_system.so.1.66.0

并且,在caffe的Makefile.config中,/usr/local/lib位于图书馆路径上:

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

那么,我在这里错过了什么?如何确保caffe知道在哪里找到libboost_system.so.1.66.0

1 个答案:

答案 0 :(得分:5)

你的/usr/local/lib/libboost_system.so.1.66.0显然是你建造的 你自己并希望加载器在运行时找到而无需特殊措施。

但是在构建它之后,您没有更新ldconfig缓存 (因为你不知道你必须这样做);所以运行时加载器还没有意识到这一点 库存在,无法找到它。

当加载程序正在寻找组装新进程所需的共享库时, 它不会搜索所有链接器的默认搜索目录。那会很慢。 默认情况下,它会搜索已缓存的数据库/etc/ld.so.cacheldconfig发现,上次运行时。

默认情况下,ldconfig会缓存它在/lib/usr/lib和目录中找到的库 文件/etc/ld.so.conf中列出的文件和/或*.conf中递归include的任何类似/etc/ld.so.conf文件。 例如:

$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf

$ cat /etc/ld.so.conf.d/*.conf
/usr/lib/x86_64-linux-gnu/libfakeroot
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/nvidia-384
/usr/lib32/nvidia-384
/usr/lib/nvidia-384
/usr/lib32/nvidia-384
# Legacy biarch compatibility support
/lib32
/usr/lib32

您看到/usr/local/lib列在那里。所以,要让加载器知道 您的新/usr/local/lib/libboost_system.so.1.66.0,只需运行:

ldconfig

以root身份。您需要在安装新的本地构建时执行此操作 /usr/local/lib中的共享库。

如果您希望加载程序找到不在/a/b/libfoo.so中的共享库ldconfig 缓存,您可以通过将/a/b/libfoo.so附加到值的特殊措施来实现 环境变量LD_LIBRARY_PATH(默认情况下为空)在您启动的环境中 需要加载该库的进程。加载程序将搜索LD_LIBRARY_PATH ldconfig缓存之前的目录(如果有)。但是,添加共享库 到ldconfig缓存应该是明智的选择并设置LD_LIBRARY_PATH 当然,仅仅因为对ldconfig设备或链接器的-rpath option

的无知而没有充分的动力