1

Я работаю в вычислительном кластере под управлением 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 ) будет его обновлять, если это возможно.

2 ответа2

2

Мне удалось собрать GCC 4.8.5 из исходного кода в домашнем каталоге на Centos 6.7. Я использую дистрибутив glibc; Мне не нужно было строить glibc.

Предостережение: я делаю это в системе, где установлены зависимости сборки для исходного пакета GCC 4.4.x дистрибутива, а также пакет libmpc-devel из репозитория epel. Если они отсутствуют, вам, возможно, придется сначала собрать их из исходного кода в домашний каталог и каким-то образом изменить процесс сборки gcc, чтобы использовать их оттуда (если это даже возможно).

Здание GCC:

  1. Захватить GCC источник

    curl -LO https://mirrors.kernel.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
    
  2. экстракт

    tar xf gcc-4.8.5.tar.bz2
    
  3. Создайте каталог сборки вне исходного каталога GCC и перейдите к нему

     mkdir build && cd build
    
  4. Настройка. Я сделал:

     ../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
    
  5. Построить. У меня есть 4 ядра, поэтому я сделал:

     make -j 5
    
  6. устанавливать

     make install
    
  7. Теперь я могу скомпилировать и запустить тестовый код.

     /home/rakslice/gcc_4_8/bin/g++-4.8     hello.cpp   -o hello
     ./hello
     Hello, World!
    
0

Что касается ваших конкретных вопросов:

(1) Да, это возможно, но это может быть не весело.

(2) Нет, обычно вы можете использовать систему glibc. Из gcc вам нужны libstdc++ , libgcc и т.д.

Мой подход заключается в том, чтобы очень строго следовать официальным инструкциям и прибегать к неофициальным инструкциям, только если они очень хорошо соответствуют вашей платформе.

Я бы на самом деле не стал возиться с 4.8 и сразу пошел бы к одному из текущих выпусков (5.2 или 4.9).

Примечание: я не выполнял установку gcc без полномочий root, но я работаю на системах, которые поддерживают разные версии gcc как модули gnu.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .