ฉันได้สร้าง gcc เวอร์ชั่นใหม่กว่าสำหรับ rhel6 สำหรับหลาย ๆ รุ่นแล้ว (ตั้งแต่ 4.7.x ถึง 5.3.1)
กระบวนการนี้ค่อนข้างง่ายขอบคุณ Jakub Jelinek fedora gcc ที่สร้างขึ้นใน koji
เพียงหยิบ src rpm ล่าสุดสำหรับเวอร์ชั่นที่คุณต้องการ (เช่น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
ตอนนี้ส่วนที่น่าเบื่อมาแล้ว - แพคเกจใด ๆ ที่มีรุ่นสูงกว่าที่จัดหาโดยคุณต้องดาวน์โหลด distro จากโคจิและทำซ้ำกระบวนการซ้ำจนกว่าจะครบตามข้อกำหนดทั้งหมด
ฉันโกง btw
ฉันมักจะบรรจุใหม่รอบต่อนาทีเพื่อให้มีโครงสร้างการสร้างที่ถูกต้องโดยใช้สิ่งอำนวยความสะดวก gnu เพื่อใช้วางอย่างถูกต้องและความต้องการที่มีชื่อดังนั้น gmp / mpc / mpfr / isl (ไม่จำเป็นต้องมีการอุดตัน) อีกต่อไป (bloated) tar ถูกสร้างใหม่ใน src rpm ใหม่ (โดยมีการเปลี่ยนแปลงเล็กน้อยในไฟล์ spec) โดยไม่มีการพึ่งพาเวอร์ชันของแพ็คเกจ (rpm) เมื่อฉันรู้ว่าไม่มีใครใช้ ADA ฉันเพียงแค่ลบส่วนที่เกี่ยวข้องกับตัวริ้นออกจาก specfile ทำให้กระบวนการสร้างง่ายขึ้นทำให้ฉันเหลือเพียง binutils ที่ต้องกังวล
Gcc สามารถสร้างด้วย binutils รุ่นเก่าได้ดังนั้นหากคุณรีบแก้ไขเพิ่มเติม specfile เพื่อให้ต้องมี 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 นี้จะติดตั้งแบบเคียงข้างกันโดยไม่ทำลาย distro rpm (แต่ต้องเปลี่ยนชื่อและการแก้ไขบางอย่างเป็นชื่อแพ็คเกจภายใน) ฉันมักจะเพิ่มโมดูลสภาพแวดล้อมเพื่อให้ฉันสามารถโหลดและยกเลิกการโหลด gcc นี้ตามที่ต้องการ (คล้ายกับวิธีการทำงานของคอลเลกชัน) เป็นส่วนหนึ่งของรอบต่อนาที (ดังนั้นฉันจึงเพิ่มการพึ่งพาใหม่)
ในที่สุดสร้าง tree rpmbuild และวางไฟล์ที่ hey ควรไปและ build:
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 เพื่อพัฒนาแอพเหล่านั้นเป็นต้น