(Как) Могу ли я использовать новый C++ 11 ABI с devtoolset-7 на Centos/RHEL?

Моя цель - использовать gcc 7.2 (и clang 6) в Centos 7 для создания исполняемых файлов, совместимых с целями Centos 7, без установленного devtoolset, но * с использованием более нового C++ ABI *.

Более новый ABI исправил пару недостатков в lib, которые не могли быть исправлены без изменения ABI. Например, список:: размер O(1) против O(n), нет COW для строк.

Я размышлял над ответом о том, почему это не возможно в следующем вопросе. -D_GLIBCXX_USE_CXX11_ABI = 1 неэффективно для devtoolset-7 в CentOS 7

1 ответ

Это похоже на дубликат вопроса, с которым вы связаны, я не вижу причин держать оба вопроса открытыми.

Могу ли я использовать новый C++ 11 ABI с devtoolset-7 для Centos/RHEL?

cxx11 ABI влияет на ряд внутренних факторов libstdc++.so (в частности, языковые аспекты), которые не могут поддерживаться моделью смешанных связей devtoolset. Соответствующие функции, которые инициализируют локали, уже присутствуют в системе libstdc++.so и не может быть заменен Devtoolset's libstdc++_nonshared.a, Из-за этого (и во избежание других потенциальных несоответствий ABI, которые мы не хотим влиять на пользователей RHEL/CentOS) мы отключаем новый ABI в devtoolset (как правильно указано в ответе на другой вопрос).

Если вам действительно нужно новое cxx11 ABI вам нужно будет создать свой собственный GCC 7, который использует обычные динамические ссылки на свои собственные libstdc++.so (а не модель смешанной компоновки, используемая devtoolset), а затем убедитесь, что новый libstdC++.so используется во время выполнения (см. Поиск динамических или общих библиотек в руководстве).

Другие вопросы по тегам