Ответ 1
Код g++ ABI для С++ 98 обратно совместим, вплоть до GCC 3.4
Итак, если вы компилируете и связываете свой окончательный исполняемый файл с GCC 4.8, вы можете ссылаться на объекты и библиотеки, созданные с помощью чего-либо от GCC 3.4 до 4.8 (но не более нового)
С++ 11 ABI совпадает с С++ 98 ABI, а стандартные типы библиотек, которые являются общими для С++ 98 и С++ 11, имеют те же определения, (игнорирование GCC 4.7.0 и GCC 4.7.1, которые имели несовместимость ABI в std::pair
и std::list
при использовании С++ 11, которые были исправлены в 4.7.2 и более поздних версиях), поэтому вы можете связать С++ 98 и С++ 11 вместе (если код С++ 11 не был создан с помощью GCC 4.7.0 или 4.7.1)
Однако некоторые типы библиотек С++ 11 еще не стабильны и изменяются между версиями, например. потому что они были сначала отправлены до окончательного стандарта С++ 11 и должны были быть изменены в соответствии с окончательными правилами. Поэтому не обязательно безопасно смешивать код С++ 11, построенный с помощью кода GCC 4.6 и С++ 11, созданного с помощью GCC 4.8
В вашем случае, где весь код С++ 11 построен с GCC 4.8, это будет нормально. Если вы обновите компилятор, вы должны перестроить весь код С++ 11 с новым GCC, чтобы быть в безопасности. (Вам не нужно перестраивать код С++ 98/С++ 03)