Ubuntu 12.04:ld找不到库

时间:2014-06-29 18:39:54

标签: linux ubuntu ubuntu-12.04 ld

我正在尝试编译Caffe(http://caffe.berkeleyvision.org/installation.html),我收到以下错误:

/usr/bin/ld: cannot find -lcblas
/usr/bin/ld: cannot find -latlas

但是,我安装了这些库(libatlas)。 我的LD_LIBRARY_PATH包含路径/ usr / lib / atlas-base,它包含文件libcblas.so和libatlas.so(以及其他一些文件)。

为什么ld找不到这些库? 感谢。

4 个答案:

答案 0 :(得分:11)

tl; dr: Caffe makefile在libblas.so中查找/usr/lib。如果缺少,update-alternatives会在其安装位置创建符号链接/usr/lib/libblas.so。同样适用于libcblas.soLD_LIBRARY_PATH用于运行时,并且与此无关。


编译时,

LD_LIBRARY_PATH对您没有任何帮助。它只提供了在执行依赖它们的程序时查找共享库的目录,编译之后。但是,在编译期间进行链接时,编译器需要找到这些共享库,并通过LD_LIBRARY_PATH之外的其他方式来完成。

更重要的是:如果使用gccclang进行编译,则使用-L标志提供要查找要链接的库的目录,并且不考虑LD_LIBRARY_PATH环境变量。

libblas.so的常见位置为/usr/lib/atlas-base//usr/lib/libblas/Makefile的{​​{1}}没有做任何特别的事情来尝试找到这些子目录,并依赖于这些库位于默认库目录caffe中。通常存在符号链接/usr/lib/,并指向共享库的实际位置。出于某种原因,在初始配置中情况并非如此。

在处理包的多个替代方案时,/usr/lib/libblas.so会派上用场。在update-alternatives的情况下,您可以轻松地在您可能已安装的多个实施(libblas.solibblas)之间切换,并通过更改符号链接来实现此目的。 / p>

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.

答案 1 :(得分:6)

sudo apt-get install libatlas-base-dev为我工作,它删除了两个缺少的依赖项。

有关其他详细信息https://github.com/BVLC/caffe/issues/559

,请参阅此主题

答案 2 :(得分:5)

事实证明我必须运行

sudo update-alternatives --config libblas.so
sudo update-alternatives --config liblapack.so

并选择libatlas。 我不知道为什么,。如果有人能解释我,我会给他答案。 感谢。

答案 3 :(得分:4)

作为@ Ran的答案的附录,Ubuntu特别针对Caffe需要一个奇怪的包结构。我刚刚在我自己的机器上修复了同样的问题,并且如果其他人被卡住了,这里有一些帮助。 (Ubuntu 14.04)。

libatlas-dev没有libatlas-base-dev作为依赖项! Caffe似乎只喜欢后者的库。安装它。

然后,运行@Ran建议的命令,并从/ usr / lib下的atlas-base目录中选择库。只安装了libatlas-dev,update-alternatives将输出位于@ swalog的帖子的底部,但实际上并没有链接一个caffe似乎赞同的atlas库!它需要是来自atlas-base的那个。希望这有帮助!