Я пишу приложение, и я хотел бы использовать GCC 4.8 на rhel7. Моя проблема в том, что мне нужно использовать стороннюю коллекцию lib, которая была построена с использованием GCC 4.4, построенного на rhel6.с использованием библиотеки GCC 4.4 с приложением GCC 4.8
ответ
Кто-то предложил создать интерфейс между моим приложением и библиотеки с использованием Экстерн «C», чтобы избежать проблем ABI идти между C++ 03 в C++ 11, а только передать простых структур С в интерфейс.
Это значимое предложение, так как слишком сложно сохранить совместимость с ABI на интерфейсах C++.
Но они также предложили ее возможно, я мог бы скопировать и ссылку libstdC++ и libgcc из машины RHEL6 с третьей стороной Lib (и мой интерфейс) построен с использованием тех. Здесь я смущен.
Оба libgcc и libstdC++ сохранить обратную совместимость (если в GCC5, но это не ваш случай), так что третья сторона Lib должна хорошо работать с RHEL7 LIBS.
Учитывая, что основная версия (libName.so.major.minor.x.z) из libstdC++ и libgcc одинакова на RHEL6 и 7, мне действительно нужно, чтобы скопировать их от RHEL6 до 7?
Нет (см. Выше).
Брус Я строю свой интерфейс на RHEL6, и просто скопировать его вместе с 3-й партии Lib к rhel7 (без копирования старой libstdC++/libgcc)?
Да, это сработает.
Я имею в виду, поскольку материал, построенный с использованием старого libstdC++/libgcc , должен быть совместимым с переходом, нет?
Правильно (обычно говорят, что «новые версии стандартных библиотек совместимы с обратной совместимостью, то есть программное обеспечение, скомпилированное с более старыми библиотеками, будет продолжать работать»).
Могу ли я столкнуться с проблемами (ABI)?
Если вам удастся передать объект STL, созданный в одном libstdC++, у вас будут странные ошибки. Но если в вашей и сторонней библиотеке есть чистые C-интерфейсы, это не должно быть проблемой (поскольку для STL-объектов не удастся избежать их содержащих библиотек).
Если мне нужно скопировать libstdC++ и libgcc из RHEL6, и связать старые и новые версии вместе - как я могу это сделать? будет ли предложено статически связать новые версии?
Это было бы лишней нагрузкой.
- 1. nullptr непризнанным с GCC 4.8
- 2. Здание gcc-4.8
- 3. Как сменить python gcc на gcc 4.8?
- 4. Как настроить libstdC++ с помощью GCC 4.8?
- 5. gcc 4.4 в Xcode
- 6. Double Free ошибка с AddressSanitizer GCC 4.8
- 7. Использование gcc 4.8 или новее с RedHawk
- 8. Интеграция gcc 4.8 с Xcode 4.x
- 9. Настройка сборки GDC с GCC 4.8 Снимок
- 10. Установка gcc 4.8 на Debian
- 11. Создание общей библиотеки с использованием gcc
- 12. Создание статической библиотеки с использованием GCC
- 13. gcc 4.8 ошибка компоновщика при связывании библиотеки ускорения потока
- 14. Boost log, GCC 4.4 и CMake
- 15. GCC 4.8 терпит неудачу во время связывания с libmagic
- 16. Модель связи по умолчанию в gcc 4.4 vs. gcc> 4.4
- 17. Makefile с использованием смешанных версий gcc
- 18. Компиляция .CPP с использованием GCC
- 19. компилировать приложение с gcc, которое отличается от библиотеки, скомпилированной с другой версией gcc
- 20. C++ GCC Почему этот код sfinae можно скомпилировать с помощью GCC 4.7, но не с 4.8?
- 21. <stdatomic.h> в GCC 4.8?
- 22. Gcc плагин api от 4.8 до 4.9
- 23. GCC 4.8 реверсирует пакет параметров вариационного шаблона
- 24. Archlinux downgrade gcc от 5.2 до 4.8
- 25. GCC 4.8 и char16_t streams - ошибка?
- 26. g ++ и gcc 4.8 cant find null_ptr?
- 27. Отключение сообщения об ошибке в GCC 4.8
- 28. сборка статической библиотеки gcc
- 29. GCC 4.5 vs 4.4 привязка к зависимостям
- 30. Сбор общей библиотеки gcc
Основная проблема заключается в следующем: что произойдет, если вы согласитесь с 'new int' от 4.4.8 с' delete' от 4.8.5 или наоборот? Использование 'extern 'C" 'на интерфейсе не является магическим исправлением, потому что' int * 'разрешено в C. – MSalters