Безопасно ли связывать объекты С++ 17, С++ 14 и С++ 11 о связывании объектов, скомпилированных с использованием различных языковых стандартов, и Джонатан Уэйкли, превосходный ответ на этот вопрос, объясняет обещания стабильности ABI, которые gcc/libstdc++ сделать, чтобы заверить, что это работает.
Есть еще одна вещь, которая может меняться между версиями gcc - язык ABI через -fabi-version
. Допустим, для простоты у меня есть три объектных файла:
-
foo.o
, скомпилированный с gcc 6.5 С++ 14 -
bar.o
, скомпилированный с gcc 7.4 С++ 14 -
quux.o
, скомпилированный с gcc 8.3 С++ 17
Все с соответствующими языками ABI по умолчанию (то есть 10, 11 и 13). Связывание этих объектов безопасно с точки зрения библиотеки согласно связанному ответу. Но есть ли вещи, которые могут пойти не так с точки зрения языка ABI? Есть ли что-то, за чем я должен следить? Кажется, что большинство изменений языка ABI не вызовут проблем, но изменение соглашения о вызовах для пустых типов классов в 12 может?