Что такое «C ++ ABI Specification», упоминаемая в руководстве GCC? - PullRequest
0 голосов
/ 20 октября 2018

Я просматривал руководство по GCC для C ++ и наткнулся на следующую цитату:

Версия 0 относится к версии, наиболее близко соответствующей спецификации C ++ ABI.Следовательно, ABI, полученный с использованием версии 0, будет меняться в разных версиях G ++, поскольку ошибки ABI исправлены.( source )

Как видно, приведенный выше отрывок ссылается на своего рода стандартный C ++ ABI.Однако, насколько я понимаю, такого ABI не существует.О чем говорит этот отрывок?Хороший ответ даст как полное объяснение, так и практическое.Помещение «спецификации C ++ ABI» в предпочитаемую мной поисковую систему ничего не дает.

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Мы можем видеть из предложения WG21 N4028 Определение переносимого ABI C ++ , на что ссылается gcc - это Common Vendor ABI (Itanium C ++ ABI) :

Существующая практика

Примеры существующей практики включают в себя:

  • Общий поставщик ABI (Itanium C ++ ABI) - шаг в этом направлении, чтобы определитьABI для языка на некоторых платформах. Сегодня поддерживается такими компиляторами, как GCC и EDG .Он не определяет ABI для стандартной библиотеки, так что это необходимо, но недостаточно, например, для использования std::string на стабильной границе API
  • Microsoft VC ++ также долгое время была де-факто стабильной, хотя и не документированнойABI для языка.Он не имеет стабильного ABI для стандартной библиотеки, но намеренно нарушает совместимость ABI в каждом основном выпуске, например, чтобы обеспечить непрерывное улучшение реализации и быстро внедрить новую стандартную библиотеку, которая содержит критические изменения ABI.
  • ...

gcc также охватывает это в своих Правилах и рекомендациях ABI :

... Кроме того,Исходный код C ++, который компилируется в объектные файлы, преобразуется компилятором: он упорядочивает объекты с определенным выравниванием и в определенной компоновке, искажает имена в соответствии с четко определенным алгоритмом, имеет специальные механизмы для поддержки виртуальных функций и т. Д. Эти деталиопределяются как двоичный интерфейс приложения компилятора или ABI.Начиная с версии 3 GCC, компилятор GNU C ++ использует промышленный стандарт C ++ ABI, Itanium C ++ ABI ....

0 голосов
/ 20 октября 2018

GCC использует Itanium ABI по умолчанию: http://itanium -cxx-abi.github.io / cxx-abi /

...