Я использую GCC для компиляции приложения C++ на Ubuntu 13. Я хочу иметь возможность использовать функции C++ 11 в моем коде, но в то же время все еще могу создать двоичный файл, который мои пользователи могут запускать на более ранних версиях версии Ubuntu.
Если я скомпилирую Ubuntu 13 с последней версией GCC, мой двоичный файл не будет запущен на Ubuntu 12, поскольку glibc не поддерживает переходы: (Насколько совместимы разные версии glibc?)
Какие у меня варианты?
Возможно ли это даже без того, чтобы мои пользователи не прыгали через массивные обручи?
Если нет, что должны делать мои пользователи, чтобы иметь возможность запускать двоичный файл (т.е. Может ли он установить новый glibc в старой версии Ubuntu)?
Примечание. Я не хочу рассматривать статическую связь glibc с тех пор:
В настоящее время мое приложение не использует никаких функций C++ 11, и я компилирую более старую версию Ubuntu со старой версией GCC, чтобы избежать этой проблемы. Но мне грустно, что я не могу использовать последние и самые лучшие функции языка :(
Вы можете попытаться использовать библиотеки Boost, которые имеют те же функции, что и С++ 11, и являются "более ретро-совместимыми", чем С++ 11: он легко скомпилируется в старой версии Ubuntu.
В противном случае лучшим вариантом может быть запрос пользователям Ubuntu 12.04 на обновление там GCC с 4.6 до 4.7 или более поздней версии: http://www.swiftsoftwaregroup.com/upgrade-gcc-4-7-ubuntu-12-04/
В общем случае библиотека c++ совместима только в том случае, если используется один и тот же компилятор, и (!) Сопоставляются версии компиляторов (возможно, вам повезет). В этом смысле нет возможности быть переносимым, помимо написания C-кода.
Вы спрашиваете: "Как использовать код, который не находится в старых системах".
Ответ, конечно же, "Включите код с вашим проектом".
Если вы продумаете то, что вы просите, вы поймете, что в любом случае вам понадобится код для функций С++ 11 в libstdc++. Поэтому, если они не на ubuntu 12, вы должны добавить их. Поэтому вам придется статически связать его. это единственный способ гарантировать, что он будет работать на произвольной системе ubuntu12.
Ну, вы можете сделать фантастическую установку, но в конце концов, ваши приложения будут "динамически связываться" с libstdc++, поэтому она также может быть статически связана, так как никакая другая программа не ищет ее на ubuntu12