gcc - with - usr lib x86_64 linux gnu libstdc++ so 6
GLIBCXX_3.4.9 no encontrado (3)
El problema es que construiste tu nuevo GCC
incorrectamente: en Linux debes usar
./configure --prefix=/usr
El prefijo de instalación predeterminado es /usr/local
, por lo make install
binarios de make install
gcc
y g++
deben make install
en /usr/local/bin
, etc.
Lo que te está sucediendo ahora es que compilas y vinculas usando el nuevo GCC 4.2.4
, pero en el tiempo de ejecución tu programa se une al antiguo /usr/lib64/libstdc++.so.6 (versión 6.0.8, en lugar de ser necesario) 6.0.9). Puede confirmarlo ejecutando ldd build/ALPHA_SE/m5.opt
: debería ver que usa /usr/lib64/libstdc++.so.6
.
Hay varias soluciones que podrías hacer.
env LD_LIBRARY_PATH=/usr/local/lib64 ldd build/ALPHA_SE/m5.opt
debería mostrarle que configurar LD_LIBRARY_PATH
es suficiente para redirigir el binario a la biblioteca correcta, y
LD_LIBRARY_PATH=/usr/local/lib64 build/ALPHA_SE/m5.opt
debería simplemente correr. Podrías "hornear" esta ruta en m5.opt binario volviéndola a enlazar con -Wl,-rpath=/usr/local/lib64
.
Una solución más permanente es arreglar las bibliotecas de la misma forma en que arregló los binarios:
cd /usr/lib64 && mv libstdc++.so.6 libstdc++.so.6_bak &&
ln -s /usr/local/lib64/libstdc++.so.6 .
Una solución aún mejor es reconfigurar el nuevo GCC
con --prefix=/usr
, y luego make all install
.
Tengo un problema con respecto a libstdc ++.
Instalé una nueva versión de gcc e intenté compilar el código de C ++. La compilación funcionó, pero cuando trato de ejecutar el binario (m5.opt es su nombre) tengo el siguiente error: build / ALPHA_SE / m5.opt: /usr/lib64/libstdc++.so.6: versión `GLIBCXX_3 .4.9 ''no encontrado (requerido por build / ALPHA_SE / m5.opt).
¿Debo reemplazar libstdc ++, entonces? Y si es así, ¿dónde puedo descargar la versión que quiero? En el sitio web de GCC dicen que libstdc ++ es una parte de gcc ahora.
¡Espero que alguien pueda ayudarme! Ahora solo tengo 4 meses en Linux, así que todo es muy nuevo para mí.
Max
detalles
GCC:
Tenía gcc 4.1.2 antes, pero descargué gcc 4.2.4. Del directorio gcc sin marcar, ejecuté "./configure"; "hacer"; "sudo make install". Cuando traté de usar gcc o g ++ para compilar, su versión predeterminada sigue siendo 4.1.2. Para superar esto, reemplacé algunos enlaces:
mv / usr / bin / gcc / usr / bin / gcc_bak
ls-usr / local / bin / gcc gcc
mv / usr / bin / g ++ / usr / bin / g ++ _ bak
ln-usr / local / bin / g ++ g ++
GLIBC (++) - libstdc ++:
/usr/lib64/libstdc++.so.6 -> libstdc ++. so.6.0.8
/usr/local/lib/libstdc++.so -> libstdc ++. so.6.0.9
/lib/libc.so.6 -> libc-2.5.so -> libc-2.5.so
Versión de Linux:
uname -a gives: Linux madmax 2.6.18-128.4.1.el5 # 1 SMP Martes 4 de agosto 12:51:10 EDT 2009 x86_64 x86_64 x86_64 GNU / Linux
Sé que esta es una pregunta muy antigua, pero ...
No es una buena idea reemplazar el compilador del sistema (es decir, el que está en /usr
) porque todo el sistema se habrá creado con él y dependerá de él.
Por lo general, es mejor instalar el nuevo compilador en una ubicación separada y luego ver las preguntas frecuentes de libstdc ++. ¿Cómo puedo asegurarme de que se encuentre la biblioteca vinculada dinámicamente? y Buscar bibliotecas dinámicas o compartidas en el manual sobre cómo garantizar la libstdc ++ correcta, por lo que se encuentra en el tiempo de ejecución.
Las otras respuestas aquí deberían estar bien, pero la solución ''rápida y fácil'' si tienes instalado gcc en / usr / local / es simplemente agregar las nuevas librerías a LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
También puede verificar si tiene las versiones correctas de GLIBC instaladas usando
strings /usr/lib/libstdc++.so.6 | grep GLIBC
strings /usr/local/lib64/libstdc++.so.18 | grep GLIBC
Recibí este último consejo de otro foro, por lo que los créditos deben pagarse debido a créditos.