Новое в Linux здесь. На моей Ubuntu уже были gcc 11 и 12, но я скомпилировал gcc-14 с помощью следующей команды:
./configure -v --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --prefix=/usr/local/gcc-14.1.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib --program-suffix=-14.1.0
потом после make && make install
Я добавил gcc-14 в свой список доступных компиляторов, используя альтернативы обновления:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc-14.1.0/bin/gcc-14.1.0 14 --slave /usr/bin/g++ g++ /usr/local/gcc-14.1.0/bin/g++-14.1.0 --slave /usr/bin/gcov gcov /usr/local/gcc-14.1.0/bin/gcov-14.1.0
Однако при компиляции кода cpp, использующего функции С++ 23, я получаю ошибку ссылки:
/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.31' not found
Я думаю, что libstdc++.so используется для gcc-12 или gcc-11. libstdc++.so доступен для gcc-14 по адресу /usr/local/gcc-14.1.0/lib64/libstdc++.so.
Есть ли способ указать, что gcc-14 всегда должен использовать собственный libstdc++? (Без указания статического пути к libstdc++, который будет использоваться во время компиляции внутри моего сценария cmake)
@Someprogrammerdude Полезно знать. Перекомпиляция gcc без указания цели/сборки/хоста может решить проблему?
Нет, к проблеме это не имеет отношения, но не думаю, что у меня самого с этим возникали проблемы при использовании update-alternatives... Кстати, какую версию Ubuntu вы используете? Разве вы не можете установить gcc-14 и g++-14 с помощью apt? Это то, что я сделал, но я не помню, установлено ли это значение по умолчанию 24.04 или я добавил для него какой-то репозиторий.
мой дистрибутив основан на Ubuntu 22. У меня нет доступа к gcc-14, поэтому я его скомпилировал. Использование альтернатив обновления gcc --version показывает, как и ожидалось, gcc 14.1.0. Может быть, проблема не в том, что я думаю изначально?
Ксемут: Для дальнейшего использования: ОТ в комментарии — это сокращение от «не по теме», и это означает, что оно не означает решения или указания на проблему, но может решить или указать на другие проблемы с тем, что представлено. «Несвязанный» также иногда может использоваться для пометки комментариев с полезной информацией.





Исправил мою проблему, выполнив:
sudo apt remove gcc-11 gcc-12
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt upgrade
Новый пакет gcc-13-base установлен и теперь все в порядке.
ОТ: Параметры конфигурации
--build,--hostи--targetнужны только для кросс-компиляции.