c++ gcc libstdc++

/usr/lib/libstdc++.so.6: versión `GLIBCXX_3.4.15 ''no encontrado



gcc (17)

A veces no controla la máquina de destino (por ejemplo, su biblioteca necesita ejecutarse en un sistema empresarial bloqueado). En tal caso, deberá volver a compilar su código utilizando la versión de GCC que corresponde a su versión GLIBCXX. En ese caso, puede hacer lo siguiente:

  1. Busque la última versión de GLIBCXX compatible con la máquina de destino: strings /usr/lib/libstdc++.so.6 | grep GLIBC strings /usr/lib/libstdc++.so.6 | grep GLIBC ... Digamos que la versión es 3.4.19 .
  2. Use https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html para encontrar la versión GCC correspondiente. En nuestro caso, esto es [4.8.3, 4.9.0) .

¿Cómo puedo obtener GLIBCXX_3.4.15 en Ubuntu? No puedo ejecutar algunos programas que estoy compilando.

Cuando lo hago:

strings /usr/lib/libstdc++.so.6 | grep GLIBC

Yo obtengo:

GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBC_2.2.5 GLIBC_2.3 GLIBC_2.4 GLIBC_2.3.4 GLIBC_2.3.2 GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH

¡Gracias por cualquier ayuda!


Acabo de enfrentar una edición similar de la versión LLVM 3.7. primero compruebe si ha instalado la biblioteca requerida en su sistema:

$locate libstdc++.so.6.*

A continuación, agregue la ubicación encontrada a su variable de entorno $ LD_LIBRARY_PATH.


En mi caso, LD_LIBRARY_PATH tenía / usr / lib64 antes que / usr / local / lib64. (Estaba construyendo llvm 3.9).
El nuevo compilador gcc que instalé para compilar llvm 3.9 tenía bibliotecas que usaban las bibliotecas GLIBCXX más nuevas en / usr / local / lib64. Por lo tanto, preparé LD_LIBRARY_PATH para que el enlazador vea primero / usr / local / lib64.
Eso resolvió este problema.


Estaba intentando que funcionara clang (que también requiere 6.0.15), y mientras hurgaba encontré que estaba instalado en /usr/local/lib/libstdc++.so.6.0.15 . Se instaló allí cuando instalé grafito (una versión experimental de gcc).

Si necesita acceder a bibliotecas en esa ubicación, deberá definir LD_LIBRARY_PATH como:

export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/usr/local/lib64:/usr/lib64

Pude tocar clang para trabajar después de hacer esto. Espero que sea útil para alguien.


Estoy compilando gcc 4.6 desde la fuente, y aparentemente

sudo make install

no atrapó este. Busqué y encontré

gcc/trunk/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.15

Lo copié en / usr / lib y redirigí libstdc ++. So.6 para apuntar al nuevo, y ahora todo funciona.


He estado evitando este problema en el pasado simplemente vinculando libstdc ++ estáticamente con este parámetro enviado a g ++ al vincular mi ejecutable:

-static-libstdc++

Si vincular en la biblioteca estáticamente es una opción, esta es probablemente la solución más rápida.


Lo mismo con gcc versión 4.8.1 (GCC) y libstdc++.so.6.0.18 . Tuve que copiarlo aquí /usr/lib/x86_64-linux-gnu en mi cuadro ubuntu.


Los extraje de un RPM ( RPM para libstdc ++ ) y luego:

export LD_LIBRARY_PATH=.

Para configurar el sistema para buscar las bibliotecas en el directorio actual. Entonces solo ejecuté mi programa. Pero en mi caso, he recibido un único ejecutable que necesitaba, no era un cambio de todo el sistema.


Me encuentro con este problema cuando trato de usar matlab eng para llamar a m funciones desde el código c. que ocurre con el comando mex -f .. ..

Mi solución:

strings /usr/lib/i386-<tab>/libstdc++.so.6 | grep GLIBC

Encontré que incluye 3.4.15

entonces mi sistema tiene las libs más nuevas.

el problema proviene del propio Matlab, llama a su propia libstdc ++. so.6 de {MATLAB}/bin

entonces, solo reemplácelo con la lib actualizada del sistema.


Para este error, copié la última libstdc ++. So.6.0.17 de otro servidor, y eliminé el enlace suave y lo recreé.

1. Copie libstdc ++. So.6.0.15 o la última desde otro servidor al sistema afectado.
En mi caso, SUSE linux 11 SP3 tenía lo último.
2. rm libstdc ++. So.6
3. ln -s libstdc ++. So.6.0.17 libstdc ++. So.6 (en el directorio / usr / lib64).

nJoy


Tenía varias versiones del compilador gcc instaladas y necesitaba usar una versión más reciente que la instalación predeterminada. Como no soy un administrador del sistema para nuestros sistemas Linux, no puedo simplemente cambiar / usr / lib o muchas de las otras sugerencias anteriores. Estaba encontrando este problema y finalmente lo rastreé para establecer mi ruta al directorio de la biblioteca de 32 bits en lugar del directorio de la biblioteca de 64 bits (lib64). Dado que las bibliotecas en el directorio de 32 bits eran incompatibles, el sistema adoptó de manera predeterminada la versión anterior, que estaba desactualizada.

El uso de -L en la ruta a la que hacía referencia dio advertencias sobre "omitir libstdc ++ incompatible. Por lo tanto, al buscar -lstdc ++". Esta fue la pista que me ayudó a resolver finalmente el problema.


Tengo el mismo error. Así es como funcionó para mí:

  • limpiado el proyecto bajo gcc actualmente instalado
  • recompilarlo

Funcionó a la perfección!



Tuve el mismo problema porque cambié el usuario de mí mismo a otra persona:

su

Por alguna razón, después de la compilación normal, no pude ejecutarla (el mismo mensaje de error). Directamente ssh a la otra cuenta de usuario funciona.


Tuve un problema similar y lo resolví vinculando estáticamente libstdc++ al programa que estaba compilando, así:

$ LIBS=-lstdc++ ./configure ... etc.

en lugar de lo usual

$ ./configure ... etc.

Es posible que haya problemas con esta solución al cargar bibliotecas compartidas en tiempo de ejecución, pero no he investigado el tema lo suficiente como para comentar.


gcc versión 4.8.1, el error parece ser:

/ root / bllvm / build / Release + Asserts / bin / llvm-tblgen: /usr/lib64/libstdc++.so.6: versión `GLIBCXX_3.4.15 ''no encontrada (requerida por / root / bllvm / build / Release + Asserts / bin / llvm-tblgen)

Encontré libstdc ++. So.6.0.18 en el lugar donde cumplí gcc 4.8.1

Entonces me gusta esto

cp ~/objdir/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.18 /usr/lib64/ rm /usr/lib64/libstdc++.so.6 ln -s libstdc++.so.6.0.18 libstdc++.so.6

problema resuelto.