Я работаю на вычислительном кластере под управлением CentOS6/RHEL6, который я совместно использую примерно со 100 другими пользователями и которым управляет один ИТ-администратор.
Недавно я начал писать на C++, и часть моего кода зависит от C++11. Согласноэта веб-страница, C++11 поддерживается gcc
версиями 4.8.1 и выше.
К сожалению, вычислительный кластер имеет версию 4.4.7.
Некоторое время назад, по другой причине, я попытался установить gcc
версию 4.8.4 в папку под моим домашним каталогом на кластере. Установка не удалась, сэто сообщение об ошибке. Некоторое гугление привело меня к мысли, что мне следует обновить glibc
, поэтому я попытался установить более новую версию в свой домашний каталог. Этопровалился драматично.
Мой ИТ-администратор пришел к выводу: «Вероятно, не получится изменить версию gcc
на кластере». Прежде чем я начну надоедать ей новыми вопросами (потому что на этом этапе януждатьсяобновленная версиянекоторыйКомпилятор C), я собираю эти данные с помощью краудсорсинга:
(1) gcc
Возможна ли установка версии 4.8.1+ на мою учетную запись? (После того, как я попытался сделать это в последний раз, некоторые люди сказали, что это в корне плохая идея.)
(2) Если ответ на (1) да, какие меры предосторожности мне следует предпринять на этот раз, чтобы убедиться, что установка прошла успешно? glibc
Необходима ли установка на мою учетную запись? Это осуществимо?
(3) Если ответ на вопрос (1) «нет», сможет ли мой ИТ-администратор установить более новую версию для gcc
всей системы, не нарушая код, который зависит от уже существующей версии?
(4) Если ни одно из вышеперечисленного не осуществимо для gcc
, изменится ли ситуация с другим компилятором C?
Подводя итог, я ищу человека со знанием gcc
(или другого компилятора C), который объяснит, как человек (без sudo
полномочий) мог бы его обновить, если это возможно.
решение1
Мне удалось собрать GCC 4.8.5 из исходников в домашнем каталоге на Centos 6.7. Я использую дистрибутив glibc; мне не пришлось собирать glibc.
Предостережение: Я делаю это в системе, где установлены зависимости сборки для исходного пакета GCC 4.4.x дистрибутива, а также пакет libmpc-devel
из репозитория epel. Если они отсутствуют, вам, возможно, придется сначала собрать их из исходного кода в домашнем каталоге и каким-то образом изменить процесс сборки gcc, чтобы использовать их оттуда (если это вообще возможно).
Строительство ССЗ:
Захватить исходный код GCC
curl -LO https://mirrors.kernel.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
Извлекать
tar xf gcc-4.8.5.tar.bz2
Создайте каталог сборки вне исходного каталога GCC и перейдите в него.
mkdir build && cd build
Настроить. Я сделал:
../gcc-4.8.4/configure --build=x86_64-linux-gnu --prefix=/home/rakslice/gcc_4_8 \ --enable-checking=release --enable-languages=c,c++,fortran \ --disable-multilib --program-suffix=-4.8
Сборка. У меня 4 ядра, поэтому я сделал:
make -j 5
Установить
make install
Теперь я могу скомпилировать и запустить тестовый код.
/home/rakslice/gcc_4_8/bin/g++-4.8 hello.cpp -o hello ./hello Hello, World!
решение2
Относительно Ваших конкретных вопросов:
(1) Да, это осуществимо, но может быть неинтересно.
(2) Нет, обычно можно использовать системный glibc. Из gcc нужно libstdc++
и libgcc
т.д.
Мой подход будет заключаться в том, чтобы следоватьофициальные инструкции очень близкои прибегайте к неофициальным инструкциям только в том случае, если они очень хорошо соответствуют вашей платформе.
На самом деле я бы не стал заморачиваться с версией 4.8 и перешел бы сразу к одной из текущих серий релизов (5.2 или 4.9).
Примечание: я сам не производил установку gcc без полномочий root, но работаю с системами, которые поддерживают различные версии gcc в качестве модулей gnu.