tl; dr:Caffe
Make-Datei sucht nach libblas.so
in /usr/lib
. Wenn diese Datei fehlt, erstellt update-alternatives
einen symbolischen Link /usr/lib/libblas.so
an dem Ort, an dem sie installiert ist. Gleiches gilt für libcblas.so
. LD_LIBRARY_PATH
ist für die Laufzeit und hat damit nichts zu tun.
LD_LIBRARY_PATH
hilft Ihnen nicht wirklich beim Kompilieren. Es stellt nur Verzeichnisse bereit, die nach freigegebenen Bibliotheken suchen, wenn sie Programme ausführen, die auf ihnen basieren, nach sie sind kompiliert. Beim Verbinden während der Kompilierung muss der Compiler diese gemeinsam genutzten Bibliotheken finden und zwar auf andere Weise als LD_LIBRARY_PATH
.
Mehr auf den Punkt: wenn mit gcc
oder clang
kompiliert, die Verzeichnisse, in denen für die Bibliotheken zu suchen, mit zu verbinden sind, um den -L
Flag versehen mit, und es nicht betrachtet die LD_LIBRARY_PATH
Umgebungsvariable.
Gemeinsame Standorte für libblas.so
sind /usr/lib/atlas-base/
und /usr/lib/libblas/
. Die Makefile
für caffe
tut nichts besonderes, um zu versuchen, diese Unterverzeichnisse zu finden, und setzt voraus, dass sich diese Bibliotheken im Standardbibliotheksverzeichnis /usr/lib/
befinden. In der Regel existiert ein symbolischer Link /usr/lib/libblas.so
und verweist auf den tatsächlichen Speicherort der gemeinsam genutzten Bibliothek. Aus irgendeinem Grund war dies in Ihrer anfänglichen Konfiguration nicht der Fall.
Wenn es um mehrere Alternativen für Pakete geht, ist update-alternatives
praktisch. Im Fall libblas.so
können Sie problemlos zwischen mehreren Implementierungen (libblas
, openblas
), die Sie möglicherweise installiert haben, wechseln, indem Sie die symbolischen Links ändern.
sudo update-alternatives --config libblas.so
erstellt diese symbolische Verbindung, wenn es fehlte, was wiederum den Compiler finden die gemeinsame Bibliothek finden, Ihr Problem zu lösen. Dies wird durch die Ausgabe des Befehls angezeigt:
$ 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.
gleiche Art von Argumentation libcblas.so
gilt.
Das funktioniert! Vielen Dank – mcExchange