Aggiungi il percorso della libreria a LD_LIBRARY_PATH
variabile d'ambiente
TL;DR
GCC richiede che tu gli dica dove si trova la tua libreria manualmente quando non riesce a trovare la versione giusta, cosa che può essere fatta in diversi modi. Uno è aggiungerlo al LD_LIBRARY_PATH
.
export LD_LIBRARY_PATH="/usr/local/lib64/:$LD_LIBRARY_PATH"
Per alcuni, il percorso della libreria sarà /usr/local/lib64/
. Altri hanno segnalato il percorso della libreria /usr/lib/x86_64-linux-gnu/
lavorando invece per loro.
Perché dobbiamo aggiungere la libreria a LD_LIBRARY_PATH
?
Quando compili e installi GCC, mette le librerie in una di queste directory, ma questo è tutto ciò che fa. Secondo le FAQ per libstdc++
, l'errore che abbiamo ottenuto significa che il linker dinamico ha trovato la versione errata di libstdc++
biblioteca condivisa. Poiché il linker non riesce a trovare la versione corretta, dobbiamo dirgli dove trovare il libstdc++
libreria.
Il modo più semplice per risolvere questo problema è utilizzare la variabile d'ambiente LD_LIBRARY_PATH, che è un elenco di directory separate da due punti in cui il linker cercherà le librerie condivise.
Esistono anche altri modi per risolvere questo problema. Puoi trovare questa e le altre soluzioni menzionate brevemente quando installi gcc
se leggi l'output di make:
Le librerie sono state installate in:
/usr/local/lib/../lib32
Se ti capita mai di voler collegare le librerie installate in una data directory, LIBDIR, devi usare libtool e specificare il percorso completo della libreria, oppure usare il flag `-LLIBDIR' durante il collegamento ed eseguire almeno uno dei seguente:
- aggiungi LIBDIR alla variabile d'ambiente `LD_LIBRARY_PATH' durante l'esecuzione
- aggiungi LIBDIR alla variabile d'ambiente `LD_RUN_PATH' durante il collegamento
- usa il flag del linker `-Wl,-rpath -Wl,LIBDIR'
- chiedi al tuo amministratore di sistema di aggiungere LIBDIR a `/etc/ld.so.conf'
Consulta qualsiasi documentazione del sistema operativo sulle librerie condivise per ulteriori informazioni, come le pagine di manuale ld(1) e ld.so(8).
Grr, era semplice! Inoltre, "se ti capita mai di voler collegare alle librerie installate", sul serio?
Ho avuto lo stesso problema sul mio Ubuntu 14.04 quando ho provato a installare TopTracker. Ho ricevuto questi errori:
/usr/share/toptracker/bin/TopTracker:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:versione 'CXXABI_1.3.8' non trovata (richiesta da /usr/share/toptracker/bin/TopTracker)/ usr/share/toptracker/bin/TopTracker:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:versione 'GLIBCXX_3.4.21' non trovata (richiesta da /usr/share/toptracker/bin/TopTracker)/usr /share/toptracker/bin/TopTracker:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:versione 'CXXABI_1.3.9' non trovata (richiesto da /usr/share/toptracker/bin/TopTracker)
Ma poi ho installato la versione 4.9 di gcc e il problema è scomparso:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9 g++-4.9