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がこれらのライブラリを見つけられないのはなぜですか?ありがとう。
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
にも適用されます。
Sudo apt-get install libatlas-base-dev
は私のために働いた、それは両方の欠けている依存関係を取り除いた。
詳細については、このスレッドを参照してください https://github.com/BVLC/caffe/issues/559
実行しなければならなかったことが判明
Sudo update-alternatives --config libblas.so
Sudo update-alternatives --config liblapack.so
そしてlibatlasを選択します。なぜだかわかりません。誰かがこれを私に説明できるなら、私は彼に答えを与えます。ありがとう。
@Ranの回答の補足として、特にUbuntuには、Caffeで必要なもののための奇妙なパッケージ構造があります。私は自分のマシンでこの同じ問題を修正する際にこの投稿に出くわしました。 (Ubuntu 14.04)。
libatlas-devには、依存関係としてlibatlas-base-devがありません! Caffeは後者のライブラリだけが好きなようです。インストールしてください。
次に、@ Ranによって提案されたコマンドを実行し、/ usr/libの下のatlas-baseディレクトリからライブラリを選択します。 libatlas-devがインストールされているだけで、update-alternativesは@swalogの投稿の下部に出力を表示しますが、実際にはcaffeが承認しているように見えるアトラスライブラリをリンクしません! atlas-baseからのものである必要があります。お役に立てれば!