Se compilo un programma C++ sulla mia macchina e lo eseguo su un altro (con software precedente) ottengo: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found
.Versioni GLIBCXX
Infatti sul mio glibc sistema è più recente (ho ottenuto gcc-4.5.1 librerie: libstdC++ so.6.0.14.) E strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
stampe da GLIBCXX_3.4
a GLIBCXX_3.4.14
. Sull'altro sistema, invece, stampa solo fino a GLIBCXX_3.4.8
(ho ottenuto libstdC++. So.6.0.8).
Così ho alcune domande:
Perché il mio linker collega i binari C++ contro libstdC++ versione
GLIBCXX_3.4.9
invece diGLIBCXX_3.4.14
?Se ho rispettato il mio binario contro la versione libstdC++
GLIBCXX_3.4
, suppongo che funzionerebbe quasi ovunque. Ciò implicherebbe qualsiasi tipo di problema? (Ad esempio: sarebbe utilizzare anziani -e quindi worse- implementazioni algoritmo?)Se invece ho staticamente collegare il mio programma contro la mia libstdC++ Credo che verrà eseguito in tutto il mondo; il binario sarà molto più grande (~ 1 MB), ovviamente, altri pro/contro?
Posso forzare il linker a collegare il mio binario a una determinata versione di libstdC++?
Si dovrebbe usare 'objdump' per ispezionare la libreria, non' stringhe'. –