मैंने अब कई संस्करणों के लिए rhel6 के लिए नए gcc संस्करण बनाए हैं (4.7.x से 5.3.1 तक)।
यह प्रक्रिया कोहाजी पर पाए गए रेडहट के जकब जेलाइनक फेडोरा जीसीसी बिल्ड्स के लिए काफी आसान है
आपको जो भी आवश्यक संस्करण के लिए नवीनतम 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
अब थकाऊ भाग आता है - कोई भी पैकेज जिसमें यम फ्रॉस्ट द्वारा प्रदान किए गए संस्करण से अधिक है, जो आपके डिस्ट्रो को कोजी से डाउनलोड करने की आवश्यकता है , और जब तक सभी निर्भरता आवश्यकताओं को पूरा नहीं किया जाता है तब तक इस प्रक्रिया को दोहराएं।
मैं धोखा देता हूं, बी.टी.वी.
मैं आमतौर पर आरपीएम को रीपैकेज करता हूं जिसमें सही तरीके से रखे गए और नामित आवश्यकताओं का उपयोग करने के लिए ग्नू सुविधा का उपयोग करके एक सही बिल्ड ट्री होता है, इसलिए gmp / mpc / mpfr / isl (क्लॉग की अब आवश्यकता नहीं है) सही पथ में डाउनलोड और अनटर्ड हैं, और नया (फूला हुआ) टार को उनके पैकेज्ड (आरपीएम) संस्करणों पर कोई निर्भरता के साथ एक नए src rpm (फ़ाइल में मामूली बदलाव के साथ) में फिर से बनाया गया है। चूंकि मुझे एडीए का उपयोग करने वाला कोई भी नहीं पता है, मैं बस सट्टेबाजी से gnat से संबंधित भागों को हटा देता हूं, आगे की निर्माण प्रक्रिया को सरल करता हूं, मुझे चिंता करने के लिए सिर्फ बिनुतिल के साथ छोड़ देता है।
Gcc वास्तव में पुराने Binutils के साथ निर्माण कर सकता है, इसलिए यदि आप जल्दबाजी में हैं, तो अपने सिस्टम पर पहले से मौजूद Binutils संस्करण की आवश्यकता के लिए नमूना को संपादित करें। इसका परिणाम थोड़ा अपंग होगा, लेकिन ज्यादातर यह काफी अच्छा प्रदर्शन करेगा।
यह ज्यादातर अच्छी तरह से काम करता है।
अद्यतन १
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
आपके पास उपसर्ग सेट करने का विकल्प भी है, इसलिए यह आरपीएम डिस्ट्रो आरपीएम को तोड़े बिना साइड-बाय-साइड स्थापित हो जाएगा (लेकिन इसके लिए नाम बदलने की आवश्यकता है, और आंतरिक पैकेज नामों में कुछ संशोधनों की आवश्यकता है)। मैं आमतौर पर एक पर्यावरण-मॉड्यूल जोड़ता हूं, इसलिए मैं आरसीएम के हिस्से के रूप में इस gcc को आवश्यक के रूप में लोड कर सकता हूं (समान काम करता हूं) (इसलिए मैं एक नई निर्भरता जोड़ता हूं)।
अंत में rpmbuild ट्री बनाएं और उन फ़ाइलों को रखें जहाँ हे को जाना चाहिए और निर्माण करना चाहिए:
yum install rpmdevtools rpm-build
rpmdev-setuptree
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/{SOURCES,SPECS}/gcc.spec
rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec
अद्यतन २
आम तौर पर किसी को विकास के लिए "सर्वर" ओएस का उपयोग नहीं करना चाहिए - यही कारण है कि आपके पास फेडोरा है जो पहले से ही नवीनतम जीसीसी के साथ आता है। मेरी कुछ विशेष आवश्यकताएं हैं, लेकिन आपको वास्तव में कार्य के लिए सही टूल का उपयोग करने पर विचार करना चाहिए - उत्पादन एप्लिकेशन चलाने के लिए rhel / centos, उन ऐप्स को विकसित करने के लिए फेडोरा आदि।