TL;博士:Caffe
makefile文件会在/usr/lib
libblas.so
。如果缺失,update-alternatives
会在安装它的位置创建一个符号链接/usr/lib/libblas.so
。同样适用于libcblas.so
。 LD_LIBRARY_PATH
是为运行时,并没有任何关系。
LD_LIBRARY_PATH
编译时不会真的帮到你。它仅提供目录以在执行依赖于它们的程序时查找共享库,在之后被编译。尽管如此,在编译期间链接时,编译器需要找到这些共享库,并通过除LD_LIBRARY_PATH
之外的其他方式来完成。
更重要的一点:如果与gcc
或clang
,编译目录中查找库使用的-L
标志提供链接,并没有考虑LD_LIBRARY_PATH
环境变量。
libblas.so
的常用地址是/usr/lib/atlas-base/
和/usr/lib/libblas/
。对于caffe
,Makefile
没有做任何特别的尝试和定位这些子目录,并且依赖于这些库位于默认库目录/usr/lib/
中。通常存在符号链接/usr/lib/libblas.so
,并指向共享库的真实位置。出于某种原因,在初始配置中情况并非如此。
当处理多种包装替代品时,update-alternatives
派上用场。在libblas.so
的情况下,您可以轻松切换您可能已安装的多个实现(libblas
,openblas
),并通过更改符号链接来实现。
sudo update-alternatives --config libblas.so
创建此符号链接时,它丢失,这反过来让编译器找到共享库,解决您的问题。这由命令的输出表示:
$ sudo update-alternatives --config libblas.so
There is only one alternative in link group libblas.so (providing /usr/lib/libblas.so): /usr/lib/libblas/libblas.so
Nothing to configure.
同样的推理适用于libcblas.so
。
This Works!谢谢 – mcExchange