Ubuntu 12.04: ld ne trouve pas la bibliothèque
Je suis en train de compiler Caffe (http://caffe.berkeleyvision.org/installation.html) et j'obtiens les erreurs suivantes:
/usr/bin/ld: cannot find -lcblas
/usr/bin/ld: cannot find -latlas
Cependant, j'ai ces bibliothèques installées (libatlas).
Mon LD_LIBRARY_PATH contient le chemin /usr/lib/atlas-base et il contient les fichiers libcblas.donc, et libatlas.donc (et quelques autres fichiers).
Pourquoi ld ne pouvez pas trouver ces bibliothèques?
Merci.
source d'informationauteur Ran
Vous devez vous connecter pour publier un commentaire.
tl;dr:
Caffe
makefile recherchelibblas.so
dans/usr/lib
. En cas de disparition,update-alternatives
crée un lien symbolique/usr/lib/libblas.so
à l'endroit où il est installé. Même s'applique àlibcblas.so
.LD_LIBRARY_PATH
est pour l'exécution, et n'a rien à voir avec cela.LD_LIBRARY_PATH
n'a pas vraiment vous aider lors de la compilation. Il fournit seulement des répertoires à rechercher des bibliothèques partagées lors de l'exécution de programmes qui s'appuient sur eux, après ils sont compilés. Encore, lors de la liaison lors de la compilation, le compilateur a besoin de trouver ces bibliothèques partagées, et par d'autres moyens queLD_LIBRARY_PATH
.Plus au point: si la compilation avec
gcc
ouclang
les répertoires de bibliothèques de lien avec sont fournis à l'aide de la-L
drapeau, et il ne considère pas lesLD_LIBRARY_PATH
variable d'environnement.Endroits communs pour
libblas.so
sont/usr/lib/atlas-base/
et/usr/lib/libblas/
. LeMakefile
pourcaffe
n'a rien fait de particulier pour essayer de trouver ces sous-répertoires, et s'appuie sur ces librairies par défaut dans le répertoire de la bibliothèque/usr/lib/
. Généralement, un lien symbolique/usr/lib/libblas.so
existe, et pointe vers l'emplacement réel de la bibliothèque partagée. Pour certaines raisons, ce n'était pas le cas dans votre configuration initiale.Lorsque vous traitez avec plusieurs solutions de rechange pour les paquets,
update-alternatives
est très pratique. Dans le cas delibblas.so
il vous permet de basculer facilement entre plusieurs implémentations (libblas
openblas
) vous pouvez l'avoir installé, et le fait en modifiant les liens symboliques.sudo update-alternatives --config libblas.so
créé ce lien symbolique quand il était absent, qui à son tour permet au compilateur de trouver la bibliothèque partagée, la résolution de votre problème. Ceci est indiqué par la sortie de la commande:Même type de raisonnement s'applique à
libcblas.so
.sudo apt-get install libatlas-base-dev
a fonctionné pour moi, elle a enlevé les deux dépendances manquantes.Voir ce fil de discussion pour plus de détails https://github.com/BVLC/caffe/issues/559
Il s'avère que j'ai eu à courir
et pour sélectionner libatlas .
Je n'ai aucune idée pourquoi. Si quelqu'un peut m'expliquer ce que je vais lui donner la réponse.
Merci.
Comme un additif à @Ran réponse, Ubuntu, en particulier, a une drôle de paquet de la structure de ce qui est nécessaire avec Caffe. Je viens de tomber sur ce post dans la fixation de ce même problème sur ma propre machine, et voici un peu d'aide si d'autres sont bloqués. (Ubuntu 14.04).
libatlas-dev n'ont libatlas-base-dev comme une dépendance! Caffe semble que, comme les bibliothèques de ce dernier. L'installer.
Ensuite, exécutez les commandes suggéré par @Ran et sélectionnez les bibliothèques de l'atlas de la base sous-répertoire de /usr/lib. Avec juste libatlas-dev installé, update-alternatives auront la sortie en bas de @swalog post, mais ne fait pas le lien d'un atlas de la bibliothèque qui caffe semble approuver! Il doit être celui de l'atlas de la base. Espérons que cette aide!