Если я скомпилирую программу на С++ и запускаю ее на другой (со старым программным обеспечением), я получаю: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found
.
На самом деле в моей системе glibc является более новым (я получил gcc-libs 4.5.1: libstdС++. so.6.0.14) и strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
печатает от GLIBCXX_3.4
до GLIBCXX_3.4.14
. На другой системе вместо этого он печатает только до GLIBCXX_3.4.8
(я получил libstdС++. So.6.0.8).
Итак, у меня есть несколько вопросов:
-
Почему мой компоновщик связывает бинарные файлы С++ с версией libstdС++
GLIBCXX_3.4.9
вместоGLIBCXX_3.4.14
? -
Если я выполнил свой двоичный код в версии libstdС++
GLIBCXX_3.4
, я думаю, что он будет работать почти везде. Будет ли это подразумевать какие-либо проблемы? (например: будет ли он использовать более старые и, тем самым, алгоритмы реализации алгоритма?) -
Если вместо этого я статически свяжу свою программу с моим libstdС++, я предполагаю, что она будет работать везде; двоичный будет намного больше (~ 1 МБ), конечно, любые другие плюсы/минусы?
-
Могу ли я заставить компоновщик связывать мой двоичный файл с данной версией libstdС++?