Как установить новые версии G ++, использующие соответствующую стандартную библиотеку C ++?

Я пытаюсь установить несколько версий компилятора g ++ для тестирования.

Я хотел бы иметь возможность установить g++ 4.9.3, 5.1.0, 5.2.0 и 6.1.0.

Я знаю, что могу выполнять

sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y;
sudo apt-get update -qq
sudo apt-get install g++-4.9, g++5.1, g++5.2, g++6

, но в моих тестах все они заканчиваются использованием стандартной библиотеки, установленной системой, которая является стандартной библиотекой g++-4 -series. Я могу сказать, потому что когда я компилирую код, стандартная библиотека не делает некоторых вещей, которые стандарт C ++ 11 говорит, что это должно делать, например, конструктор перемещения std::string не помечен noexcept. Но на ubuntu-xenial, в котором есть стандартная библиотека gcc-6, это так, и другие связанные с этим проблемы решаются.

Я вижу, что есть пакеты с именем libstdc++-4.8-dev, например, в репозитории ubuntu, но когда я устанавливаю более новые компиляторы, они, кажется, не используют их.

Я также знаю, что могу устанавливать компиляторы из исходного кода в моем домашнем каталоге, но их сборка занимает так много времени, что я, к сожалению, не могу сделать это в travis-ci. В travis-ci время всех сборок истекает через час.

Есть ли простой способ настроить компиляторы, которые устанавливаются из ppa, на использование правильных версий стандартной библиотеки C ++, т. Е. Той, с которой они были выпущены, а не системы по умолчанию?

Есть ли простой способ, которым я могу установить двоичный файл компилятора со всеми связанными библиотеками в папку в моем домашнем каталоге, используя apt-get, который не включает сборку из исходного кода?

Я нашел эти инструкции , в которых говорится, что я могу использовать флаг -rpath или файл спецификации, или настроить LD_LIBRARY_PATH, но я не уверен в том, какие пути мне следует задавать. Другая проблема заключается в том, что это не просто динамический компоновщик, похоже, что компиляторы ubuntu-toolchain-r/test также используют системные заголовки libstdc++, поэтому мне нужно как-то это исправить.


Моя текущая стратегия заключается в том, чтобы просто загрузить архив с выпуском исходного кода и попытаться поработать с флагами конфигурации, пока я не найду способ собрать его за <60 минут. Как только я получу его для сборки, он будет находиться в моем каталоге «cache», поэтому будущие сборки моего проекта смогут получить образ за <1 минуту.

Функция «кэширования» доступна только при использовании travis-изображений с точной (12.04 LTS) ubuntu, поэтому я даже не могу использовать trusty здесь.

Моя строка конфигурации в настоящее время:

${GCC_SRC_DIR}/configure --prefix=${GCC_DIR}  --disable-checking --enable-languages=c,c++ --disable-multilib --disable-bootstrap

Я делаю это в основном на основе инструкций этого парня .

Существует также старый отчет об ошибке , в котором упоминается об этом.

Опция --disable-checking на самом деле не задокументирована, так что, возможно, она больше не существует. Опция --disable-bootstrap задокументирована, надеюсь, она не позволит мне фактически собрать компилятор три раза , как описано здесь ... хотя я не уверен, насколько вероятно, что это сработает.

Я использую make -j2 --quiet для фактической сборки после этого.


Теперь работаем с более длинной строкой:

        ${GCC_SRC_DIR}/configure --prefix=${GCC_DIR}  --disable-checking --enable-languages=c,c++ --disable-multilib --disable-bootstrap --disable-libsanitizer --disable-libquadmath --disable-libgomp --disable-libssp --disable-libvtv --disable-libada --enable-version-specific-runtime-libs
5
задан 24 May 2017 в 01:39

1 ответ

Конфигурирование gcc-5.x: cd build-gcc-5.x/

../gcc-5.3.0/configure --prefix=/usr/local/gcc53 --program-suffix=53 --enable-languages=c,c++ --with-system-zlib --disable-multilib --disable-libstdcxx-pch

(Требует sudo apt install zlib1g-dev, если --with-system-zlib)

О "60 минутах ограничивают": можно выйти из терминала после того, как скажут 55 минут и только продолжатся позже make.

0
ответ дан 24 May 2017 в 01:39

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

Похожие вопросы: