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

Является ли clang++ ABI таким же, как g++?

Возможный дубликат:
Совместимость GCC 4.0, 4.2 и LLVM ABI

В соответствии с вопросом, совместимы ли оба С++ ABI?
То есть может ли использоваться двоичный (общий объект), сгенерированный первым, и связанный с последним (и наоборот)?

Приветствия

4b9b3361

Ответ 1

В соответствии с clang libС++ page они нацеливаются на

Совместимость ABI с gcc libstdС++ для некоторых низкоуровневых функций, таких как объекты исключений, rtti и распределение памяти.

который, по-видимому, подразумевает, что они не нацелены на 100% совместимость. Например, на этой странице они также говорят:

С многолетнего опыта (включая внедрение стандартной библиотеки до этого) мы многое узнали о внедрении стандартных контейнеров, требующих поломки ABI, и фундаментальных изменений в том, как они реализованы. Например, общепринято, что построение std::string с использованием "оптимизации коротких строк" ​​вместо использования функции "Копировать по записи" (COW) является превосходным подходом для многоядерных машин (в частности, в С++ "0x", который имеет ссылки на rvalue). Было установлено, что разрывная совместимость ABI со старыми версиями библиотеки имеет решающее значение для достижения целей производительности libС++.

Я считаю, что GCC по-прежнему использует COW с подсчетом ссылок, поэтому кажется, что clang не беспокоится о совместимости ABI с std::string (либо с более старыми компиляторами clang, либо с GCC).

Ответ 2

Кажется, он совместим. У Clang также есть проект для собственной среды выполнения С++, и он утверждает, что это совместимый с низким уровнем с GNU stdlibС++. Я просто попробовал небольшую примерную программу, где я скомпилировал один файл с clang++, скомпилировал и связал основную программу и с g++. Пока проблем нет, но программа была довольно простой.