Зараз я створив новіші версії gcc для rhel6 для кількох версій (з 4.7.x до 5.3.1).
Процес досить легкий завдяки побудові Якуба Єлінека від Redhat, який знайдено на ki
Просто візьміть останню обертову хвилину src для потрібної версії (наприклад, 5.3.1 ).
В основному ви б почали з визначення вимог до збірки, видавши rpm -qpR src.rpm
будь-які вимоги до версії:
rpm -qpR gcc-5.3.1-4.fc23.src.rpm | grep -E '= [[:digit:]]'
binutils >= 2.24
doxygen >= 1.7.1
elfutils-devel >= 0.147
elfutils-libelf-devel >= 0.147
gcc-gnat >= 3.1
glibc-devel >= 2.4.90-13
gmp-devel >= 4.1.2-8
isl = 0.14
isl-devel = 0.14
libgnat >= 3.1
libmpc-devel >= 0.8.1
mpfr-devel >= 2.2.1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
systemtap-sdt-devel >= 1.3
Зараз йде виснажлива частина - будь-який пакет , який має версію вище , ніж це передбачено ні поступальних вашого дистрибутива повинні бути завантажений з Коджі , і рекурсивно повторити процес , поки всі вимоги залежностей не будуть виконані.
Я обманюю, btw.
Я зазвичай перепаковую обороти в хвилину, щоб містити правильне дерево збірки, використовуючи об'єкт gnu для використання правильно розміщених та названих вимог, тому gmp / mpc / mpfr / isl (cloog більше не потрібен) завантажуються та untard у правильний шлях, і новий (роздутий) смола відновлюється у новий src rpm (з незначними змінами у файлі spec), не залежно від їх упакованих (rpm) версій. Оскільки я не знаю нікого, хто використовує ADA, я просто видаляю частини, що відносяться до gnat, із специфічного файлу, додатково спрощуючи процес збирання, залишаючи мені лише бінути для переживання.
Gcc насправді може створюватись зі старими бінутілами, тому, якщо ви поспішаєте, додатково відредагуйте специфікацію, щоб вимагати версії binutils, яка вже є у вашій системі. Це призведе до трохи покаліченого gcc, але в основному він буде працювати досить добре.
В основному це працює досить добре.
ОНОВЛЕННЯ 1
Найпростіший метод відкриття src rpm - це, мабуть, yum встановити rpm та отримати доступ до всього під ~ / rpmbuild, але я віддаю перевагу
mkdir gcc-5.3.1-4.fc23
cd gcc-5.3.1-4.fc23
rpm2cpio ../gcc-5.3.1-4.fc23.src.rpm | cpio -id
tar xf gcc-5.3.1-20160212.tar.bz2
cd gcc-5.3.1-20160212
contrib/download_prerequisites
cd ..
tar caf gcc-5.3.1-20160212.tar.bz2 gcc-5.3.1-20160212
rm -rf gcc-5.3.1-20160212
# remove gnat
sed -i '/%global build_ada 1/ s/1/0/' gcc.spec
sed -i '/%if !%{build_ada}/,/%endif/ s/^/#/' gcc.spec
# remove gmp/mpfr/mpc dependencies
sed -i '/BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1, libmpc-devel >= 0.8.1/ s/.*//' gcc.spec
# remove isl dependency
sed -i '/BuildRequires: isl = %{isl_version}/,/Requires: isl-devel = %{isl_version}/ s/^/#/' gcc.spec
# Either build binutils as I do, or lower requirements
sed -i '/Requires: binutils/ s/2.24/2.20/' gcc.spec
# Make sure you don't break on gcc-java
sed -i '/gcc-java/ s/^/#/' gcc.spec
Ви також можете встановити префікс, так що цей rpm буде встановлюватися поруч, не порушуючи rpm distro (хоча вимагає зміни назви та деяких модифікацій внутрішніх імен пакунків). Я зазвичай додаю модуль оточення, щоб я міг завантажувати та вивантажувати цей gcc за потребою (подібно до того, як працюють колекції) як частина обертів (тому я додаю нову залежність).
Нарешті створіть дерево rpmbuild і помістіть файли, куди він повинен перейти, і складіть:
yum install rpmdevtools rpm-build
rpmdev-setuptree
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/{SOURCES,SPECS}/gcc.spec
rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec
ОНОВЛЕННЯ 2
Зазвичай не слід використовувати "серверний" ОС для розробки - саме тому у вас є Fedora, який вже поставляється з останніми gcc. У мене є деякі особливі вимоги, але ви дійсно повинні розглянути можливість використання правильного інструменту для виконання завдання - rhel / centos для запуску виробничих додатків, Fedora для розробки цих додатків тощо