<ก่อนหน้านี้ | Contents | ถัดไป>
5.5.1. การติดตั้ง Cross GCC
GCC ต้องใช้แพ็คเกจ GMP, MPFR และ MPC เนื่องจากแพ็คเกจเหล่านี้อาจไม่รวมอยู่ในการกระจายโฮสต์ของคุณ แพ็คเกจเหล่านี้จึงถูกสร้างขึ้นด้วย GCC แตกแพ็กเกจแต่ละแพ็กเกจลงในไดเร็กทอรีซอร์ส GCC และเปลี่ยนชื่อไดเร็กทอรีที่เป็นผลลัพธ์เพื่อให้ขั้นตอนการสร้าง GCC ใช้งานได้โดยอัตโนมัติ:
หมายเหตุ
มีความเข้าใจผิดอยู่บ่อยครั้งเกี่ยวกับบทนี้ ขั้นตอนจะเหมือนกับบทอื่นๆ ทุกบทดังที่อธิบายไว้ก่อนหน้านี้ (คำแนะนำในการสร้างแพ็คเกจ) ขั้นแรกให้แยก gcc tarball ออกจากไดเร็กทอรี source จากนั้นเปลี่ยนเป็นไดเร็กทอรีที่สร้างขึ้น คุณควรดำเนินการตามคำแนะนำด้านล่างเท่านั้น
หมายเหตุ
มีความเข้าใจผิดอยู่บ่อยครั้งเกี่ยวกับบทนี้ ขั้นตอนจะเหมือนกับบทอื่นๆ ทุกบทดังที่อธิบายไว้ก่อนหน้านี้ (คำแนะนำในการสร้างแพ็คเกจ) ขั้นแรกให้แยก gcc tarball ออกจากไดเร็กทอรี source จากนั้นเปลี่ยนเป็นไดเร็กทอรีที่สร้างขึ้น คุณควรดำเนินการตามคำแนะนำด้านล่างเท่านั้น
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
ใน gcc/config/{linux,i386/linux{,64}}.h
ใน gcc/config/{linux,i386/linux{,64}}.h
$file{,.orig} 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
's@/usr@/tools@g' $file.orig > $file
$file{,.orig} 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
's@/usr@/tools@g' $file.orig > $file
คำสั่งต่อไปนี้จะเปลี่ยนตำแหน่งของตัวเชื่อมโยงแบบไดนามิกเริ่มต้นของ GCC เพื่อใช้อันที่ติดตั้งใน /เครื่องมือ. นอกจากนี้ยังลบ / usr / รวม จากเส้นทางการค้นหารวมของ GCC ปัญหา:
สำหรับไฟล์ do
ซีพี -ยูวี sed -e
-e
สำหรับไฟล์ do
ซีพี -ยูวี sed -e
-e
เสียงสะท้อน '
#undefSTANDARD_STARTFILE_PREFIX_1
#undefSTANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file แตะ $file.orig
ทำ
เสียงสะท้อน '
#undefSTANDARD_STARTFILE_PREFIX_1
#undefSTANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file แตะ $file.orig
ทำ
ในกรณีที่ดูเหมือนยากจะทำตาม เรามาทำลายมันสักหน่อย ก่อนอื่นเราคัดลอกไฟล์ gcc/config/linux.h, gcc/config/i386/linux.hและ gcc/config/i368/linux64.h ไปยังไฟล์ที่มีชื่อเดียวกัน แต่มีคำต่อท้าย ".orig" เพิ่มเติม จากนั้นนิพจน์ sed แรกจะต่อท้าย “/tools” กับทุกอินสแตนซ์ของ “/lib/ld”, “/lib64/ld” หรือ “/lib32/ld” ในขณะที่อันที่สองจะแทนที่อินสแตนซ์ที่ฮาร์ดโค้ดของ “/usr” ต่อไป เราเพิ่มคำสั่ง define ซึ่งเปลี่ยนคำนำหน้า startfile เริ่มต้นที่ส่วนท้ายของไฟล์ โปรดทราบว่าจำเป็นต้องมีการต่อท้าย “/” ใน “/tools/lib/” สุดท้ายเราใช้ แตะ เพื่ออัปเดตการประทับเวลาในไฟล์ที่คัดลอก เมื่อใช้ร่วมกับ ซีพี -uซึ่งป้องกันการเปลี่ยนแปลงที่ไม่คาดคิดกับไฟล์ต้นฉบับในกรณีที่คำสั่งทำงานโดยไม่ได้ตั้งใจสองครั้ง
สุดท้าย บนโฮสต์ x86_64 ให้ตั้งชื่อไดเร็กทอรีเริ่มต้นสำหรับไลบรารี 64 บิตเป็น "lib":
กรณี $(uname -m) ใน x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
ว่า C
กรณี $(uname -m) ใน x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
ว่า C
เอกสาร GCC แนะนำให้สร้าง GCC ในไดเร็กทอรีบิลด์เฉพาะ:
mkdir -v บิลด์ซีดี
mkdir -v บิลด์ซีดี
เตรียม GCC สำหรับการรวบรวม:
../กำหนดค่า \
--เป้าหมาย=$LFS_TGT \
--prefix=/เครื่องมือ \
--with-glibc-version=2.11 \
--with-sysroot=$LFS \
--กับ-newlib \
--ไม่มีส่วนหัว \
--with-local-prefix=/tools \
--with-native-system-header-dir=/tools/include \
--disable-nls \
--ปิดการใช้งานร่วมกัน \
--disable-multilib \
--disable-ทศนิยมลอย \
--disable-กระทู้ \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--เปิดใช้งานภาษา=c,c++
../กำหนดค่า \
--เป้าหมาย=$LFS_TGT \
--prefix=/เครื่องมือ \
--with-glibc-version=2.11 \
--with-sysroot=$LFS \
--กับ-newlib \
--ไม่มีส่วนหัว \
--with-local-prefix=/tools \
--with-native-system-header-dir=/tools/include \
--disable-nls \
--ปิดการใช้งานร่วมกัน \
--disable-multilib \
--disable-ทศนิยมลอย \
--disable-กระทู้ \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--เปิดใช้งานภาษา=c,c++
ความหมายของตัวเลือกการกำหนดค่า:
--กับ-newlib
เนื่องจากไลบรารี C ที่ใช้งานได้ยังไม่พร้อมใช้งาน จึงมั่นใจได้ว่าค่าคงที่ inhibitor_libc ถูกกำหนดไว้เมื่อสร้าง libgcc ซึ่งจะป้องกันการคอมไพล์โค้ดที่ต้องการการสนับสนุน libc
--ไม่มีส่วนหัว
เมื่อสร้างครอสคอมไพเลอร์แบบสมบูรณ์ GCC ต้องการส่วนหัวมาตรฐานที่เข้ากันได้กับระบบเป้าหมาย สำหรับจุดประสงค์ของเรา ไม่จำเป็นต้องใช้ส่วนหัวเหล่านี้ สวิตช์นี้ป้องกันไม่ให้ GCC ค้นหา
--with-local-prefix=/tools
คำนำหน้าในเครื่องคือตำแหน่งในระบบที่ GCC จะค้นหาไฟล์รวมที่ติดตั้งในเครื่อง ค่าเริ่มต้นคือ /usr/ท้องถิ่น. กำลังตั้งค่านี้เป็น /เครื่องมือ ช่วยรักษาตำแหน่งโฮสต์ของ / usr / local ออกจากเส้นทางการค้นหาของ GCC นี้
--with-native-system-header-dir=/tools/include
ตามค่าเริ่มต้นการค้นหา GCC / usr / รวม สำหรับส่วนหัวของระบบ ร่วมกับสวิตช์ sysroot โดยปกติแล้วจะแปลเป็น $LFS/usr/รวม. อย่างไรก็ตาม ส่วนหัวที่จะติดตั้งในสองส่วนถัดไปจะไปที่ $LFS/เครื่องมือ/รวม. สวิตช์นี้ช่วยให้แน่ใจว่า gcc จะค้นหาได้อย่างถูกต้อง ในรอบที่สองของ GCC สวิตช์เดียวกันนี้จะช่วยให้แน่ใจว่าไม่พบส่วนหัวจากระบบโฮสต์
--disable-แชร์
สวิตช์นี้บังคับให้ GCC เชื่อมโยงไลบรารีภายในแบบสแตติก เราทำเช่นนี้เพื่อหลีกเลี่ยงปัญหาที่อาจเกิดขึ้นกับระบบโฮสต์
--disable-decimal-float --disable-threads --disable-libatomic, --disable- libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable- libstdcxx
สวิตช์เหล่านี้ปิดใช้งานการสนับสนุนส่วนขยายจุดทศนิยม, เธรด, libatomic, libgomp,
libquadmath, libssp, libvtv และไลบรารีมาตรฐาน C++ ตามลำดับ คุณลักษณะเหล่านี้จะล้มเหลวในการคอมไพล์เมื่อสร้าง cross-compiler และไม่จำเป็นสำหรับงานของ cross-compiling libc ชั่วคราว
--disable-multilib
บน x86_64 LFS ยังไม่สนับสนุนการกำหนดค่า multilib สวิตช์นี้ไม่เป็นอันตรายต่อ x86
--เปิดใช้งานภาษา=c,c++
อ็อพชันนี้ช่วยให้แน่ใจว่าคอมไพเลอร์ C และ C++ เท่านั้นที่ถูกสร้างขึ้น นี่เป็นภาษาเดียวที่จำเป็นในตอนนี้
รวบรวม GCC โดยเรียกใช้:
ทำ
ทำ
การรวบรวมเสร็จสมบูรณ์แล้ว ณ จุดนี้ ปกติชุดทดสอบจะทำงาน แต่ดังที่กล่าวไว้ก่อนหน้านี้ เฟรมเวิร์กชุดทดสอบยังไม่พร้อมใช้ ประโยชน์ของการทำการทดสอบ ณ จุดนี้มีน้อยมาก เนื่องจากโปรแกรมจากรอบแรกนี้จะถูกแทนที่ในไม่ช้า
ติดตั้งแพ็คเกจ:
ให้ติดตั้ง
ให้ติดตั้ง