Совместимость с библиотеками C ++ - PullRequest
8 голосов
/ 16 января 2011

В настоящее время я пишу библиотеку и собираюсь перейти с GCC 4.1.2 на 4.5.2 (последний выпуск) GCC. Если я скомпилирую свой код в статическую библиотеку, могу ли я предположить, что совместимость компилятора (очевидно, в той же ОС) не должна быть проблемой для клиентов?

EDIT Чтобы уточнить: если я предоставлю клиенту статически связанную библиотеку, скомпилированную с gcc 4.5.2, какие ограничения это накладывает на пользователей этой библиотеки с точки зрения компилятора и версии, которую они должны использовать?

Ответы [ 2 ]

8 голосов
/ 16 января 2011

Только что натолкнулся на это, которое, я полагаю, отвечает на мой вопрос http://gcc.gnu.org/bugs/#nonbugs:

ABI изменяет двоичный файл приложения C ++ Интерфейс (ABI) состоит из двух компоненты: первый определяет, как элементы классов выложены, как функции называются, как функция имена искажены и т.д .; второй часть имеет дело с внутренностями объекты в libstdc ++. Хотя мы стремиться к неизменному ABI, пока мы должны были изменить его с каждым основной выпуск. Если вы измените свой компилятор в другой основной выпуск Вы должны перекомпилировать все библиотеки, которые содержит код C ++. Если вам не удастся сделать это вы рискуете получить ошибки компоновщика или неисправные программы. Некоторые из наших Библиотеки поддержки Java также содержат C ++, так что вы можете захотеть перекомпилируйте все библиотеки для безопасности. Это не нужно перекомпилировать если вы перешли на исправление ошибки выпуск той же версии компилятор; исправления ошибок чтобы избежать изменений ABI. Смотрите также раздел совместимости GCC руководство. * +1005 *

Примечание: назначен основной выпуск путем изменения первого или второго компонент из двух или трех частей номер версии. Незначительный (исправление ошибки) релиз обозначен изменением только третий компонент. Таким образом, GCC 3.2 и 3.3 являются основными выпусками, в то время как 3.3.1 и 3.3.2 - исправления ошибок GCC 3.3. С серией 3.4 мы вводят новую схему именования; первый выпуск этой серии 3.4.0 вместо 3.4.

Исходя из этого, насколько я понимаю, мне нужно убедиться, что клиенты связывают мою библиотеку с совместимой версией gcc, совместимой с основными версиями.

1 голос
/ 16 января 2011

На самом деле не имеет значения, предоставляете ли вы статическую или динамическую библиотеку, пользователям все равно нужно будет использовать совместимый компилятор / компоновщик для связи с ним.Обычно, когда GCC делает изменение ABI, они предлагают переключатель, который можно установить для использования старого ABI.Я знаю, что они сделали это, когда перешли с 3.x на 4.x и даже на пару выпусков в серии 4.x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...