Версии GLIBCXX

Если я скомпилирую программу на C ++ на своей машине и запустил ее на другой (со старым программным обеспечением), я получу: / usr / lib / libstdc ++ .so.6: версия `GLIBCXX_3.4.9 'не найдена .

Фактически в моей системе glibc новее (я получил gcc-libs 4.5.1: libstdc ++. so.6.0.14) и strings /usr/lib/libstdc++.so.6 | grep GLIBCXX печатает от GLIBCXX_3.4 до GLIBCXX_3.4.14 . Вместо этого в другой системе он только печатает на GLIBCXX_3.4.8 (Я получил libstdc ++. так. 6.0.8).

Итак, у меня есть несколько вопросов:

  1. Почему мой компоновщик связывает двоичные файлы C ++ с версией libstdc ++ GLIBCXX_3.4.9 вместо GLIBCXX_3.4.14 ?

  2. Если бы я согласовал свой двоичный файл с версией libstdc ++ GLIBCXX_3.4 , я думаю, он работал бы почти везде. Будет ли это означать какие-то проблемы? (например: будет ли он использовать более старые, а значит и худшие, реализации алгоритмов?)

  3. Если вместо этого я статически свяжу свою программу с моей libstdc ++, я думаю, она будет работать везде; двоичный файл, конечно, будет намного больше (~ 1 МБ), любые другие плюсы / минусы?

  4. Могу ли я заставить компоновщик связать мой двоичный файл с данной версией libstdc ++?

37
задан Ignacio Vazquez-Abrams 9 November 2010 в 12:39
поделиться