Ответ 1
tl; dr: Caffe
makefile ищет libblas.so
в /usr/lib
. Если отсутствует, 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/
. Makefile
для Caffe
не делает ничего особенного, чтобы попытаться найти эти подкаталоги и полагается на то, что эти библиотеки находятся в каталоге библиотеки по умолчанию /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
.