Подтвердить что ты не робот

Совместимость GCC для общих библиотек с объектами STL в их интерфейсе

У меня есть приложение с объектами STL, которые используются как часть интерфейса С++ для плагинов.

Я знаю, что лучшим вариантом для совместимости было бы использование интерфейса C вместо этого, но это в настоящее время невозможно.

Я знаю, что все с GCC 3.4 до 4.8 в libstdС++ было очень совместимо с точки зрения ABI.

Так, например, если я компилирую с GCC 4.1, а поставщик подключаемых модулей записывает код, скомпилированный с помощью GCC 4.7, то запрет на угловые случаи будет хорошо на платформе с версией libstdС++, соответствующей GCC 4.7 или новее, при условии, что использование STL является внутренним только для .so и что внешний интерфейс .so использует чистый C, что, к сожалению, не относится ко мне.

Итак, мне интересно, что будет в отношении классов STL, используемых как часть подключаемого интерфейса. Могу ли я безопасно передавать объекты STL между общими объектами, которые не были скомпилированы с той же версией компилятора (например, 4.1 и 4.8)? И есть ли что-нибудь, что мне нужно помнить о том, как скомпилировать и разрешить шаблоны, если люди используют разные параметры компилятора?

Я подозреваю, что это будет проблематично. Однако есть шанс, что магия управления версиями символов, сделанная людьми GCC, может каким-то образом выполнить эту работу.

По этому вопросу меня интересует только компиляция и компоновка pre-С++ 11. Меня также интересуют только Linux и Mac OS X, используя GCC.

4b9b3361

Ответ 1

Я уже ответил на это в списке рассылки, но, как сказал Марк, он будет работать.

Не имеет значения, используете ли вы внутреннюю библиотеку для своего DSO или интерфейса, библиотека не заботится и обратно совместима с GCC 3.4 в любом случае.