Как связать разные версии одной и той же библиотеки в g ++?

Я пытаюсь выяснить, как загрузить две разные версии libstdc ++. Так на машине SLES10. У моего клиента есть процесс Foo, который построен на GCC 4.1.2 и, таким образом, использует версию libstdc ++ 6.0.8. Мы также создаем разделяемую библиотеку с именем libBar.so. Эта библиотека будет динамически загружаться Foo во время выполнения. libBar.so компилируется с использованием GCC 4.3.6 и libstdc ++ версии 6.0.10.

В настоящее время, когда я пытаюсь загрузить Foo libBar.so, я получаю следующую ошибку.

ошибка: невозможно загрузить общий объект '/usr/lib64/libBar.so': /usr/lib64/libstdc++.so.6: версия `GLIBCXX_3.4.9 'не найдена (требуется /usr/lib64/libBar.so)

На данный момент единственный способ заставить это работать - изменить порядок загрузки моей библиотеки (через ld.so.conf) так, чтобы Foo и libbar.so оба загружали одну и ту же (6.0.10) libstdc ++. Однако это не решение vialbe, так как оно требует, чтобы я изменил систему клиента.

Я хотел бы, чтобы Foo загрузил его версии libstdc ++. So и libBar.so со своей собственной версией libstdc ++. So, но я не могу понять, как написать свой Makefile, чтобы это произошло. Вот что у меня есть для моей линии LIBADD в Makefile.am ...

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

Что я хотел бы предположить, что хотел бы эту конкретную версию libstdc ++. Так. Однако, когда я запускаю ldd для полностью скомпилированного и связанного libBar.so, это строка, которую я вижу ...

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

Почему он не ссылается конкретно на libstdc ++. So.6.0.10? Что я должен делать вместо этого?

Ответы на вопрос(1)

Ваш ответ на вопрос