เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | 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 โดยเรียกใช้:


ทำ

ทำ

การรวบรวมเสร็จสมบูรณ์แล้ว ณ จุดนี้ ปกติชุดทดสอบจะทำงาน แต่ดังที่กล่าวไว้ก่อนหน้านี้ เฟรมเวิร์กชุดทดสอบยังไม่พร้อมใช้ ประโยชน์ของการทำการทดสอบ ณ จุดนี้มีน้อยมาก เนื่องจากโปรแกรมจากรอบแรกนี้จะถูกแทนที่ในไม่ช้า

ติดตั้งแพ็คเกจ:


ให้ติดตั้ง

ให้ติดตั้ง

ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: