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

โลโก้

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

<ก่อนหน้านี้ | Contents | ถัดไป>

5.10.1. การติดตั้ง GCC

GCC รุ่นแรกของเราได้ติดตั้งส่วนหัวของระบบภายในสองสามรายการ โดยปกติหนึ่งในนั้น จำกัด.hในทางกลับกันจะรวมถึงระบบที่เกี่ยวข้อง จำกัด.h ส่วนหัวในกรณีนี้ /tools/include/limits.h. อย่างไรก็ตาม ในช่วงเวลาของการสร้างครั้งแรกของ gcc /tools/include/limits.h ไม่มีอยู่ ดังนั้นส่วนหัวภายในที่ติดตั้ง GCC จึงเป็นไฟล์บางส่วนที่มีในตัวเอง และไม่มีคุณลักษณะเพิ่มเติมของส่วนหัวของระบบ สิ่งนี้เพียงพอสำหรับการสร้าง libc ชั่วคราว แต่บิวด์ของ GCC นี้ต้องการส่วนหัวภายในแบบเต็ม สร้างเวอร์ชันเต็มของส่วนหัวภายในโดยใช้คำสั่งที่เหมือนกับที่ระบบบิลด์ GCC ทำในสถานการณ์ปกติ:


แมว gcc/limitx.h gcc/glimits.h gcc/limity.h > \

`dirname $($LFS_TGT-gcc -print-libgcc-ชื่อไฟล์)`/include-fixed/limits.h

แมว gcc/limitx.h gcc/glimits.h gcc/limity.h > \

`dirname $($LFS_TGT-gcc -print-libgcc-ชื่อไฟล์)`/include-fixed/limits.h

ภาพ

ใน 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 เพื่อใช้ตำแหน่งที่ติดตั้งใน /เครื่องมือ.


สำหรับไฟล์ 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

ทำ

หากสร้างบน 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 รุ่นแรก มันต้องมีแพ็คเกจ GMP, MPFR และ MPC แกะ tarballs และย้ายไปยังชื่อไดเร็กทอรีที่ต้องการ:


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


สร้างไดเร็กทอรีบิลด์แยกต่างหากอีกครั้ง:


mkdir -v บิลด์ซีดี

mkdir -v บิลด์ซีดี


ก่อนเริ่มสร้าง GCC อย่าลืมยกเลิกการตั้งค่าตัวแปรสภาพแวดล้อมที่แทนที่แฟล็กการปรับให้เหมาะสมเริ่มต้น ตอนนี้เตรียม GCC สำหรับการรวบรวม:


ซีซี=$LFS_TGT-gcc \

CXX=$LFS_TGT-g++ \

AR=$LFS_TGT-ar \

RANLIB=$LFS_TGT-รันลิบ \

../กำหนดค่า \

--prefix=/เครื่องมือ \

--with-local-prefix=/tools \

--with-native-system-header-dir=/tools/include \

--เปิดใช้งานภาษา=c,c++ \

--ปิดการใช้งาน-libstdcxx-pch \

--disable-multilib \

--disable-bootstrap \

--disable-libgomp

ซีซี=$LFS_TGT-gcc \

CXX=$LFS_TGT-g++ \

AR=$LFS_TGT-ar \

RANLIB=$LFS_TGT-รันลิบ \

../กำหนดค่า \

--prefix=/เครื่องมือ \

--with-local-prefix=/tools \

--with-native-system-header-dir=/tools/include \

--เปิดใช้งานภาษา=c,c++ \

--ปิดการใช้งาน-libstdcxx-pch \

--disable-multilib \

--disable-bootstrap \

--disable-libgomp


ความหมายของตัวเลือกการกำหนดค่าใหม่:


--เปิดใช้งานภาษา=c,c++

ตัวเลือกนี้ช่วยให้แน่ใจว่าทั้งคอมไพเลอร์ C และ C++ ถูกสร้างขึ้น

--disable-libstdcxx-pch

อย่าสร้างส่วนหัวที่คอมไพล์ล่วงหน้า (PCH) สำหรับ libstdc ++. มันกินเนื้อที่มาก และเราก็ไม่มีประโยชน์อะไร

--disable-bootstrap

สำหรับบิวด์ดั้งเดิมของ GCC ค่าเริ่มต้นคือการสร้าง "bootstrap" นี่ไม่ใช่แค่คอมไพล์ GCC แต่คอมไพล์หลายครั้ง มันใช้โปรแกรมที่คอมไพล์ในรอบแรกเพื่อคอมไพล์ตัวเองเป็นครั้งที่สอง และอีกครั้งเป็นครั้งที่สาม การทำซ้ำครั้งที่สองและครั้งที่สามถูกเปรียบเทียบเพื่อให้แน่ใจว่าสามารถทำซ้ำได้เองอย่างไม่มีที่ติ นี่ก็หมายความว่ามันถูกรวบรวมอย่างถูกต้อง อย่างไรก็ตาม วิธีการบิลด์ LFS ควรจัดเตรียมคอมไพเลอร์ที่เป็นของแข็งโดยไม่จำเป็นต้องบูตสแตรปในแต่ละครั้ง

รวบรวมแพ็คเกจ:


ทำ

ทำ


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


ให้ติดตั้ง

ให้ติดตั้ง


ขั้นสุดท้าย ให้สร้างลิงก์เชื่อมโยง หลายโปรแกรมและสคริปต์ทำงาน cc แทน gccซึ่งใช้เพื่อให้โปรแกรมเป็นแบบทั่วไป ดังนั้นจึงสามารถใช้ได้กับระบบ UNIX ทุกประเภทที่ไม่ได้ติดตั้งคอมไพเลอร์ GNU C เสมอ วิ่ง cc ทำให้ผู้ดูแลระบบมีอิสระในการตัดสินใจว่าจะติดตั้งคอมไพเลอร์ C ตัวใด:


ln -sv gcc /tools/bin/cc

ln -sv gcc /tools/bin/cc


ภาพ

คำเตือน

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


echo 'int main(){}' > dummy.c cc dummy.c

readelf -l a.out | grep ': / เครื่องมือ'

echo 'int main(){}' > dummy.c cc dummy.c

readelf -l a.out | grep ': / เครื่องมือ'

หากทุกอย่างทำงานอย่างถูกต้อง จะไม่มีข้อผิดพลาด และผลลัพธ์ของคำสั่งสุดท้ายจะอยู่ในรูปแบบ:


[กำลังขอโปรแกรมล่าม: /tools/lib64/ld-linux-x86-64.so.2]

[กำลังขอโปรแกรมล่าม: /tools/lib64/ld-linux-x86-64.so.2]

โปรดทราบว่าตัวเชื่อมโยงแบบไดนามิกจะเป็น /tools/lib/ld-linux.so.2 สำหรับเครื่อง 32 บิต

หากเอาต์พุตไม่แสดงดังด้านบนหรือไม่มีเอาต์พุตเลย แสดงว่ามีบางอย่างผิดปกติ ตรวจสอบและย้อนขั้นตอนเพื่อดูว่าปัญหาอยู่ที่ไหนและแก้ไขให้ถูกต้อง ปัญหานี้ต้องได้รับการแก้ไขก่อนดำเนินการต่อ ขั้นแรก ให้ดำเนินการตรวจสุขภาพจิตอีกครั้งโดยใช้ gcc แทน cc. ถ้าสิ่งนี้ได้ผล แสดงว่า /เครื่องมือ/ถัง/ cc ลิงก์สัญลักษณ์หายไป ติดตั้ง symlink ตามด้านบน ต่อไป ตรวจสอบให้แน่ใจว่า เส้นทาง ถูกต้อง. สามารถตรวจสอบได้ด้วยการรัน เสียงสะท้อน $PATH และยืนยันว่า /เครื่องมือ/ถัง อยู่ที่หัวของรายการ ถ้า เส้นทาง ไม่ถูกต้อง อาจหมายความว่าคุณไม่ได้เข้าสู่ระบบในฐานะผู้ใช้ เอลฟ์ หรือมีบางอย่างผิดพลาดกลับมาในข้อ 4.4 “การสร้างสิ่งแวดล้อม”

เมื่อเรียบร้อยแล้ว ให้ล้างไฟล์ทดสอบ:


rm -v dummy.c a.out

rm -v dummy.c a.out


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