Bây giờ tôi đã xây dựng các phiên bản gcc mới hơn cho rrc6 cho một số phiên bản (từ 4.7.x đến 5.3.1).
Quá trình này khá dễ dàng nhờ các bản dựng Jakub Jelinek fedora gcc của Redhat được tìm thấy trên koji
Chỉ cần lấy vòng / phút src mới nhất cho bất kỳ phiên bản nào bạn yêu cầu (ví dụ: 5.3.1 ).
Về cơ bản bạn sẽ bắt đầu bằng cách xác định các yêu cầu xây dựng bằng cách phát hành rpm -qpR src.rpm
tìm kiếm bất kỳ yêu cầu phiên bản:
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
Bây giờ đến phần tẻ nhạt - bất kỳ gói nào có phiên bản cao hơn yum fro cung cấp, bản phân phối của bạn cần được tải xuống từ koji và lặp lại quy trình cho đến khi tất cả các yêu cầu phụ thuộc được đáp ứng.
Tôi gian lận, btw.
Tôi thường đóng gói lại vòng / phút để chứa cây xây dựng chính xác bằng cách sử dụng tiện ích gnu để sử dụng các yêu cầu được đặt và đặt chính xác, vì vậy gmp / mpc / mpfr / isl (cloog không còn cần thiết) được tải xuống và bỏ vào đường dẫn chính xác và mới (cồng kềnh) tar được xây dựng lại thành một src vòng / phút mới (với những thay đổi nhỏ đối với tệp spec) mà không phụ thuộc vào các phiên bản đóng gói (vòng / phút) của chúng. Vì tôi không biết ai sử dụng ADA, tôi chỉ cần loại bỏ các phần liên quan đến gnat khỏi specfile, đơn giản hóa hơn nữa quá trình xây dựng, khiến tôi chỉ lo lắng về binutils.
Gcc thực sự có thể xây dựng với các binutils cũ hơn, vì vậy nếu bạn đang vội, hãy chỉnh sửa thêm specfile để yêu cầu phiên bản binutils đã có trên hệ thống của bạn. Điều này sẽ dẫn đến một gcc hơi bị tê liệt, nhưng chủ yếu là nó sẽ hoạt động đủ tốt.
Điều này hoạt động khá tốt là chủ yếu.
CẬP NHẬT 1
Phương pháp đơn giản nhất để mở vòng / giây src có lẽ là yum cài đặt vòng / phút và truy cập mọi thứ trong ~ / rpmbuild, nhưng tôi thích
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
Bạn cũng có thể chọn đặt tiền tố để vòng / phút này sẽ cài đặt song song mà không phá vỡ vòng / phút phân phối (nhưng yêu cầu thay đổi tên và một số sửa đổi cho tên gói nội bộ). Tôi thường thêm một mô-đun môi trường để tôi có thể tải và dỡ gcc này theo yêu cầu (tương tự như cách các bộ sưu tập hoạt động) như một phần của vòng / phút (vì vậy tôi thêm một phụ thuộc mới).
Cuối cùng tạo cây rpmbuild và đặt các tệp nơi hey nên đi và xây dựng:
yum install rpmdevtools rpm-build
rpmdev-setuptree
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/{SOURCES,SPECS}/gcc.spec
rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec
CẬP NHẬT 2
Thông thường, người ta không nên sử dụng hệ điều hành "máy chủ" để phát triển - đó là lý do tại sao bạn có fedora đi kèm với gcc mới nhất. Tôi có một số yêu cầu cụ thể, nhưng bạn thực sự nên cân nhắc sử dụng công cụ phù hợp cho nhiệm vụ - rrc / centos để chạy các ứng dụng sản xuất, fedora để phát triển các ứng dụng đó, v.v.