Бинарная совместимость (с использованием C ++ 11) в старых версиях дистрибутива

0

Я использую GCC для компиляции приложения C++ на Ubuntu 13. Я хочу иметь возможность использовать функции C++ 11 в моем коде, но в то же время все еще могу создать двоичный файл, который мои пользователи могут запускать на более ранних версиях версии Ubuntu.

Если я скомпилирую Ubuntu 13 с последней версией GCC, мой двоичный файл не будет запущен на Ubuntu 12, поскольку glibc не поддерживает переходы: (Насколько совместимы разные версии glibc?)

  • Какие у меня варианты?

  • Возможно ли это даже без того, чтобы мои пользователи не прыгали через массивные обручи?

  • Если нет, что должны делать мои пользователи, чтобы иметь возможность запускать двоичный файл (т.е. Может ли он установить новый glibc в старой версии Ubuntu)?

Примечание. Я не хочу рассматривать статическую связь glibc с тех пор:

  1. Я читал, что это очень плохая идея
  2. Проблемы с лицензированием
  3. Проблемы с совместным распределением

В настоящее время мое приложение не использует никаких функций C++ 11, и я компилирую более старую версию Ubuntu со старой версией GCC, чтобы избежать этой проблемы. Но мне грустно, что я не могу использовать последние и самые лучшие функции языка :(

  • 0
    Ссылка статически. Проблемы с лицензированием будут существовать в любом случае, и статически скомпилированная программа, поскольку она включает в себя все, что ей нужно, а не полагается на конечные пользовательские библиотеки, будет работать практически в любой системе Linux, которая использует тот же процессор.
  • 0
    Просто скомпилируйте с новым gcc на более старой ОС. Установите gcc из исходников или из добавленного вручную хранилища. Возможно, вам придется статически связываться с libstdc ++ или распространять копию libstdc ++ с вашей программой (я думаю, что это законно, если вы также отправляете исходные коды libstdc ++; IANAL, уточните в своем юридическом отделе).
Показать ещё 1 комментарий
Теги:
c++11
gcc

3 ответа

1

Вы можете попытаться использовать библиотеки Boost, которые имеют те же функции, что и С++ 11, и являются "более ретро-совместимыми", чем С++ 11: он легко скомпилируется в старой версии Ubuntu.

В противном случае лучшим вариантом может быть запрос пользователям Ubuntu 12.04 на обновление там GCC с 4.6 до 4.7 или более поздней версии: http://www.swiftsoftwaregroup.com/upgrade-gcc-4-7-ubuntu-12-04/

0

В общем случае библиотека c++ совместима только в том случае, если используется один и тот же компилятор, и (!) Сопоставляются версии компиляторов (возможно, вам повезет). В этом смысле нет возможности быть переносимым, помимо написания C-кода.

0

Вы спрашиваете: "Как использовать код, который не находится в старых системах".

Ответ, конечно же, "Включите код с вашим проектом".

Если вы продумаете то, что вы просите, вы поймете, что в любом случае вам понадобится код для функций С++ 11 в libstdc++. Поэтому, если они не на ubuntu 12, вы должны добавить их. Поэтому вам придется статически связать его. это единственный способ гарантировать, что он будет работать на произвольной системе ubuntu12.

Ну, вы можете сделать фантастическую установку, но в конце концов, ваши приложения будут "динамически связываться" с libstdc++, поэтому она также может быть статически связана, так как никакая другая программа не ищет ее на ubuntu12

Ещё вопросы

Сообщество Overcoder
Наверх
Меню