Моя цель — использовать 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
Это похоже на дубликат вопроса, с которым вы связаны, я не вижу причин держать оба вопроса открытыми.
Могу ли я использовать новый 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 ++. так используется во время выполнения (см. Поиск динамических или общих библиотек в руководстве).
Других решений пока нет …