У меня есть приложение с объектами 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.