Я пишу заявку, и я хотел бы использовать GCC 4.8 на rhel7. Моя проблема в том, что мне нужно использовать стороннюю разделяемую библиотеку, которая была построена с использованием GCC 4.4, созданной на rhel6.
Кто-то предложил мне создать интерфейс между моим приложением
и библиотека, использующая extern «C», чтобы избежать проблем ABI при переходе между c ++ 03
на C ++ 11, и только передать простые структуры C в интерфейсе.
Это значимое предложение, так как слишком сложно сохранить совместимость ABI в интерфейсах C ++.
Но они также предположили, что возможно мне придется скопировать и связать
libstdc ++ и libgcc с компьютера rhel6, начиная со стороннего lib
(и мой интерфейс) построен с использованием тех. Это где я запутался.
И libgcc, и libstdc ++ сохраняют обратную совместимость (если только GCC5 но это не ваш случай) так что сторонняя библиотека должна прекрасно работать с библиотеками RHEL7.
Учитывая, что основная версия (libName.so.major.minor.x.z) libstdc ++
и libgcc одинаково на rhel6 и 7, мне действительно нужно их копировать
с rhel6 до 7?
Нет (см. Выше).
Не могу я построить свой интерфейс на rhel6, и просто скопировать его вместе
с третьей стороной lib на rhel7 (без копирования старого libstdc ++ / libgcc)?
Да, это будет работать.
Я имею в виду, так как вещи построены с использованием старых libstdc ++ / libgcc
должен быть совместим с прямым, нет?
Правильно (обычно говорят, что «новые версии стандартных библиотек обратно совместимы, то есть программное обеспечение, скомпилированное со старыми библиотеками, будет продолжать работать»).
Могу ли я столкнуться с проблемами (ABI)?
Если вам как-то удастся передать объект STL, созданный в одной libstdc ++, в другую, у вас будут странные ошибки. Но если ваша и сторонняя библиотека имеют чистые интерфейсы C, это не должно вызывать проблем (поскольку у объектов STL нет возможности избежать их содержащих библиотек).
Если мне нужно скопировать libstdc ++ и libgcc из rhel6,
и связать новые и старые версии вместе — как мне это сделать?
будет ли работать предложение статически связать новые версии?
Это было бы ненужным бременем.
Других решений пока нет …