El mecanismo I tienden a usar una combinación de readelf -V
para volcar la información .gnu.version
de libstdC++, y luego una tabla de búsqueda que coincide con el valor más grande GLIBCXX_
extraído.
readelf -sV /usr/lib/libstdc++.so.6 | sed -n 's/.*@@GLIBCXX_//p' | sort -u -V | tail -1
si su versión de sort
es demasiado viejo para tener la opción -V
(que ordena por número de versión), entonces usted puede utilizar:
tr '.' ' ' | sort -nu -t ' ' -k 1 -k 2 -k 3 -k 4 | tr ' ' '.'
en lugar de la sort -u -V
, para ordenar por hasta 4 dígitos de la versión.
En general, coincidir con la versión ABI debería ser lo suficientemente bueno.
Si usted está tratando de localizar a la libstdc++.so.<VERSION>
, sin embargo, se puede utilizar un poco de fiesta como:
file=/usr/lib/libstdc++.so.6
while [ -h $file ]; do file=$(ls -l $file | sed -n 's/.*-> //p'); done
echo ${file#*.so.}
así que para mi sistema esto produjo 6.0.10
.
Sin embargo, si usted está tratando de conseguir un binario que fue compilado en systemx para trabajar en SYSTÉMY, entonces este tipo de cosas van solamente a llegar tan lejos. En esos casos, llevando consigo una copia de la libstdC++ por lo que se utilizó para la aplicación, y luego tener una secuencia de comandos de ejecución que hace un:.
export LD_LIBRARY_PATH=<directory of stashed libstdc++.so>
exec application.bin "[email protected]"
generalmente trabaja en torno al tema de la .so que está en el cuadro siendo incompatible con la versión de la aplicación. Para diferencias más extremas en el entorno, tiendo a simplemente agregar todas las bibliotecas dependientes hasta que la aplicación funcione correctamente. Este es el equivalente de Linux de trabajar alrededor de lo que, para windows, se consideraría dll hell.
Las marcas de fecha están casi totalmente inútil, no sé por qué ellos o documentación molestamos mantener ellos. Por ejemplo, la fecha para GCC 4.6.3 es posterior a 4.7.0, pero 4.7.0 tiene más características, entonces ¿para qué sirve saber la fecha en que fue lanzado? –