2014-06-29 18 views
11

sto cercando di compilare Caffe (http://caffe.berkeleyvision.org/installation.html) e ottengo i seguenti errori:Ubuntu 12.04: LD non è possibile trovare la libreria

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

Tuttavia, ho queste librerie installate (libatlas). Il mio LD_LIBRARY_PATH contiene il percorso/usr/lib/atlas-base e contiene i file libcblas.so e libatlas.so (e anche alcuni altri file).

Perché ld non riesce a trovare queste librerie? Grazie.

risposta

10

tl; dr:Caffe makefile cerca libblas.so in /usr/lib. Se mancante, update-alternatives crea un collegamento simbolico /usr/lib/libblas.so nel percorso in cui è installato. Lo stesso vale per libcblas.so. LD_LIBRARY_PATH è per il runtime e non ha nulla a che fare con questo.


LD_LIBRARY_PATH in realtà non ti aiuta durante la compilazione. Fornisce solo le directory per cercare le librerie condivise quando eseguono programmi che si basano su di esse, dopo il vengono compilate. Tuttavia, durante il collegamento durante la compilazione, il compilatore deve trovare queste librerie condivise e lo fa in altro modo rispetto allo LD_LIBRARY_PATH.

Più precisamente: se la compilazione con gcc o clang, le directory in cui ricercare le librerie di collegamento con sono forniti utilizzando il flag -L, e non considera la variabile LD_LIBRARY_PATH ambiente.

Le posizioni comuni per libblas.so sono /usr/lib/atlas-base/ e /usr/lib/libblas/. Il Makefile per caffe non esegue alcuna operazione particolare per cercare e individuare queste sottodirectory e fa affidamento su queste librerie nella directory di libreria predefinita /usr/lib/. In genere esiste un collegamento simbolico /usr/lib/libblas.so e punta alla posizione reale della libreria condivisa. Per qualche ragione, questo non era il caso nella configurazione iniziale.

Quando si tratta di più alternative per i pacchetti, update-alternatives è utile. Nel caso di libblas.so, è possibile passare facilmente da una molteplicità di implementazioni (libblas, openblas) che è possibile installare, modificando i collegamenti simbolici.

sudo update-alternatives --config libblas.so creato questo collegamento simbolico quando mancava, che a sua volta consentono al compilatore di trovare la libreria condivisa, risolvendo il problema. Questo è indicato con l'uscita del comando:

$ 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. 

Stesso tipo di ragionamento vale per libcblas.so.

5

Si scopre ho dovuto correre

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

e per selezionare libatlas. Non ho idea del perché ,. Se qualcuno può spiegarmi questo, gli darò la risposta. Grazie.

4

Come addendum alla risposta di @ Ran, Ubuntu in particolare ha una strana struttura del pacchetto per ciò che è necessario con Caffe.Ho appena trovato questo post nel risolvere questo stesso problema sulla mia macchina, ed ecco un aiuto se gli altri sono bloccati. (Ubuntu 14.04).

libatlas-dev NON ha libatlas-base-dev come dipendenza! Caffe sembra apprezzare solo le librerie di quest'ultimo. Installalo.

Quindi, eseguire i comandi suggeriti da @Ran e selezionare le librerie dalla directory atlas-base in/usr/lib. Con solo libatlas-dev installato, update-alternative avrà l'output nella parte inferiore del post di @ swalog, ma in realtà non collega una libreria di atlanti che sembra approvare caffe! Deve essere quello di atlas-base. Spero che questo ti aiuti!

+0

Questo funziona! Grazie – mcExchange

Problemi correlati