<Trước | Nội dung | Tiếp theo>
5.10.1. Cài đặt GCC
Bản xây dựng GCC đầu tiên của chúng tôi đã cài đặt một số tiêu đề hệ thống nội bộ. Thông thường một trong số họ, giới hạn.h, sẽ lần lượt bao gồm hệ thống tương ứng giới hạn.h tiêu đề, trong trường hợp này, /tools/include/limits.h. Tuy nhiên, tại thời điểm bản dựng đầu tiên của gcc /tools/include/limits.h không tồn tại, do đó, tiêu đề nội bộ mà GCC đã cài đặt là một tệp riêng, một phần và không bao gồm các tính năng mở rộng của tiêu đề hệ thống. Điều này là đủ để xây dựng libc tạm thời, nhưng việc xây dựng GCC này hiện yêu cầu tiêu đề nội bộ đầy đủ. Tạo phiên bản đầy đủ của tiêu đề nội bộ bằng cách sử dụng lệnh giống với những gì hệ thống xây dựng GCC thực hiện trong các trường hợp bình thường:
cat gcc / limitx.h gcc / glimits.h gcc / limity.h> \
`dirname $ ($ LFS_TGT-gcc -print-libgcc-file-name) '/include-fixed/limits.h
cat gcc / limitx.h gcc / glimits.h gcc / limity.h> \
`dirname $ ($ LFS_TGT-gcc -print-libgcc-file-name) '/include-fixed/limits.h
trong gcc / config / {linux, i386 / linux {, 64}}. h
trong gcc / config / {linux, i386 / linux {, 64}}. h
$ file {,. orig} của @ / lib \ (64 \) \? \ (32 \) \? / ld @ / tools & @ g '\
's @ / usr @ / tools @ g' $ file.orig> $ file
$ file {,. orig} của @ / lib \ (64 \) \? \ (32 \) \? / ld @ / tools & @ g '\
's @ / usr @ / tools @ g' $ file.orig> $ file
Một lần nữa, hãy thay đổi vị trí của trình liên kết động mặc định của GCC để sử dụng trình liên kết được cài đặt trong /công cụ.
cho tập tin làm
cp -uv sed -e
-e
cho tập tin làm
cp -uv sed -e
-e
echo '
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/ tools / lib /"
#define STANDARD_STARTFILE_PREFIX_2 "" '>> $ file touch $ file.orig
thực hiện
echo '
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/ tools / lib /"
#define STANDARD_STARTFILE_PREFIX_2 "" '>> $ file touch $ file.orig
thực hiện
Nếu xây dựng trên x86_64, hãy thay đổi tên thư mục mặc định cho các thư viện 64-bit thành “lib”:
case $ (uname -m) trong x86_64)
sed -e '/ m64 = / s / lib64 / lib /' \
-i.orig gcc / config / i386 / t-linux64
;;
nó C
case $ (uname -m) trong x86_64)
sed -e '/ m64 = / s / lib64 / lib /' \
-i.orig gcc / config / i386 / t-linux64
;;
nó C
Như trong bản xây dựng đầu tiên của GCC, nó yêu cầu các gói GMP, MPFR và MPC. Giải nén các tarball và chuyển chúng vào các tên thư mục bắt buộc:
tar -xf ../mpfr-4.0.2.tar.xz mv -v mpfr-4.0.2 mpfr
tar -xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc
tar -xf ../mpfr-4.0.2.tar.xz mv -v mpfr-4.0.2 mpfr
tar -xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc
Tạo lại một thư mục bản dựng riêng:
mkdir -v xây dựng cd xây dựng
mkdir -v xây dựng cd xây dựng
Trước khi bắt đầu xây dựng GCC, hãy nhớ bỏ đặt bất kỳ biến môi trường nào ghi đè lên các cờ tối ưu hóa mặc định. Bây giờ chuẩn bị GCC để biên dịch:
CC = $ LFS_TGT-gcc \
CXX = $ LFS_TGT-g ++ \
AR = $ LFS_TGT-ar \
RANLIB = $ LFS_TGT-ranlib \
../cấu hình \
--prefix = / tools \
--with-local-prefix = / tools \
--with-native-system-header-dir = / tools / include \
--enable-Languages = c, c ++ \
--disable-libstdcxx-pch \
--disable-multilib \
--disable-bootstrap \
--disable-libgomp
CC = $ LFS_TGT-gcc \
CXX = $ LFS_TGT-g ++ \
AR = $ LFS_TGT-ar \
RANLIB = $ LFS_TGT-ranlib \
../cấu hình \
--prefix = / tools \
--with-local-prefix = / tools \
--with-native-system-header-dir = / tools / include \
--enable-Languages = c, c ++ \
--disable-libstdcxx-pch \
--disable-multilib \
--disable-bootstrap \
--disable-libgomp
Ý nghĩa của các tùy chọn cấu hình mới:
--enable-Languages = c, c ++
Tùy chọn này đảm bảo rằng cả trình biên dịch C và C ++ đều được xây dựng.
--disable-libstdcxx-pch
Không tạo tiêu đề được biên dịch trước (PCH) cho libstdc ++. Nó chiếm rất nhiều không gian và chúng tôi không sử dụng nó.
--disable-bootstrap
Đối với các bản dựng gốc của GCC, mặc định là tạo bản dựng "bootstrap". Điều này không chỉ biên dịch GCC, mà còn biên dịch nó nhiều lần. Nó sử dụng các chương trình được biên dịch trong một vòng đầu tiên để tự biên dịch lần thứ hai, và sau đó lại lần thứ ba. Lần lặp thứ hai và thứ ba được so sánh để đảm bảo rằng nó có thể tự tái tạo một cách hoàn hảo. Điều này cũng ngụ ý rằng nó đã được biên dịch chính xác. Tuy nhiên, phương pháp xây dựng LFS nên cung cấp một trình biên dịch chắc chắn mà không cần bootstrap mỗi lần.
Biên dịch gói:
làm cho
làm cho
Cài đặt gói:
thực hiện cài đặt
thực hiện cài đặt
Để hoàn thiện, hãy tạo một liên kết tượng trưng. Nhiều chương trình và tập lệnh chạy cc thay vì gcc, được sử dụng để giữ các chương trình chung chung và do đó có thể sử dụng được trên tất cả các loại hệ thống UNIX mà trình biên dịch GNU C không phải lúc nào cũng được cài đặt. Đang chạy cc cho phép quản trị viên hệ thống tự do quyết định cài đặt trình biên dịch C nào:
ln -sv gcc / tools / bin / cc
ln -sv gcc / tools / bin / cc
Phạt cảnh cáo
Tại thời điểm này, bắt buộc phải dừng lại và đảm bảo rằng các chức năng cơ bản (biên dịch và liên kết) của chuỗi công cụ mới đang hoạt động như mong đợi. Để thực hiện kiểm tra độ tỉnh táo, hãy chạy các lệnh sau:
echo 'int main () {}'> dummy.c cc dummy.c
readelf -l a.out | grep ': / tools'
echo 'int main () {}'> dummy.c cc dummy.c
readelf -l a.out | grep ': / tools'
Nếu mọi thứ hoạt động bình thường, sẽ không có lỗi và đầu ra của lệnh cuối cùng sẽ có dạng:
[Yêu cầu trình thông dịch chương trình: /tools/lib64/ld-linux-x86-64.so.2]
[Yêu cầu trình thông dịch chương trình: /tools/lib64/ld-linux-x86-64.so.2]
Lưu ý rằng trình liên kết động sẽ là /tools/lib/ld-linux.so.2 cho các máy 32 bit.
Nếu đầu ra không được hiển thị như trên hoặc không có đầu ra nào cả, thì có gì đó không ổn. Điều tra và kiểm tra lại các bước để tìm ra vấn đề ở đâu và khắc phục nó. Vấn đề này phải được giải quyết trước khi tiếp tục. Đầu tiên, hãy thực hiện lại kiểm tra độ tỉnh táo, sử dụng gcc thay vì cc. Nếu điều này hoạt động, thì / tools / bin / cc thiếu liên kết biểu tượng. Cài đặt liên kết biểu tượng như trên. Tiếp theo, đảm bảo rằng PATH đúng. Điều này có thể được kiểm tra bằng cách chạy echo $ PATH và xác minh rằng / tools / bin đứng đầu danh sách. Nếu PATH sai điều đó có thể có nghĩa là bạn không đăng nhập với tư cách người dùng tiệm hoặc đã xảy ra sự cố trong Phần 4.4, “Thiết lập Môi trường.”
Khi tất cả đều ổn, hãy dọn dẹp các tệp thử nghiệm:
rm -v dummy.c a.out
rm -v dummy.c a.out
<Trước | Nội dung | Tiếp theo>