¿Cómo vinculo diferentes versiones de la misma biblioteca en g ++?

Estoy tratando de descubrir cómo cargar dos versiones diferentes de libstdc ++. Así que en una máquina SLES10. Mi cliente tiene un proceso Foo, que está construido con GCC 4.1.2, y por lo tanto usa la versión 6.0.8 de libstdc ++. So. También estamos creando una biblioteca compartida llamada libBar.so. Foo cargará esta biblioteca dinámicamente en tiempo de ejecución. libBar.so se compila utilizando GCC 4.3.6 y libstdc ++ versión 6.0.10.

Actualmente, cuando intento que Foo cargue libBar.so, aparece el siguiente error.

error: no se puede cargar el objeto compartido '/usr/lib64/libBar.so': /usr/lib64/libstdc++.so.6: no se encuentra la versión `GLIBCXX_3.4.9 '(requerido por /usr/lib64/libBar.so)

Por el momento, la única forma en que puedo hacer que esto funcione es cambiar el orden de carga de mi biblioteca (a través de ld.so.conf) para que Foo y libbar.so carguen lo mismo (6.0.10) libstdc ++. So. Sin embargo, esta no es una solución vialbe, ya que requiere que modifique el sistema del cliente.

Lo que me gustaría hacer es que Foo cargue sus versiones de libstdc ++. So y libBar.so enlace a su propia versión de libstdc ++. So, pero no puedo entender cómo escribir mi Makefile para que eso suceda. Esto es lo que tengo hasta ahora, para mi línea LIBADD en Makefile.am ...

libBar_la_LIBADD = ../../vendor/SLES10/lib/libstdc++.so.6.0.10

Lo cual supongo que le gustaría a esa versión ESPECÍFICA de libstdc ++. So. Sin embargo, cuando ejecuto ldd contra libBar.so completamente compilado y vinculado, esta es la línea que veo ...

libstdc ++. so.6 => /usr/lib64/libstdc++.so.6 (0x00002aaaaeac5000)

¿Por qué no se vincula específicamente a libstdc ++. So.6.0.10? ¿Qué debería hacer en su lugar?

Respuestas a la pregunta(1)

Su respuesta a la pregunta