Como vincular versões diferentes da mesma biblioteca no g ++?

Estou tentando descobrir como carregar duas versões diferentes do libstdc ++. Então em uma máquina SLES10. Meu cliente tem um processo Foo, que é construído com o GCC 4.1.2 e, portanto, usa a versão 6.0.8 do libstdc ++. Também estamos construindo uma biblioteca compartilhada chamada libBar.so. Essa biblioteca será carregada dinamicamente pelo Foo em tempo de execução. O libBar.so é compilado usando o GCC 4.3.6 e o libstdc ++ versão 6.0.10.

Atualmente, quando tento o Foo carregar o libBar.so, recebo o seguinte erro.

erro: impossível carregar o objeto compartilhado '/usr/lib64/libBar.so': /usr/lib64/libstdc++.so.6: versão `GLIBCXX_3.4.9 'não encontrada (exigido por /usr/lib64/libBar.so)

No momento, a única maneira de fazer isso funcionar é alterando a ordem de carregamento da biblioteca (via ld.so.conf) para que Foo e libbar.so carreguem o mesmo (6.0.10) libstdc ++. So. No entanto, essa não é uma solução vialbe, pois exige que eu modifique o sistema do cliente.

O que eu gostaria de fazer é fazer com que o Foo carregue suas versões do libstdc ++. So e libBar.so se vincule à sua própria versão do libstdc ++. So, mas não consigo descobrir como escrever meu Makefile para que isso aconteça. Aqui está o que eu tenho até agora, para minha linha LIBADD no Makefile.am ...

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

O que eu assumiria que gostaria da versão ESPECÍFICA do libstdc ++. No entanto, quando executo o ldd no libBar.so totalmente compilado e vinculado, esta é a linha que vejo ...

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

Por que ele não está vinculando especificamente ao libstdc ++. So.6.0.10? O que devo fazer em seu lugar?

questionAnswers(1)

yourAnswerToTheQuestion