5.5.1. ການຕິດຕັ້ງ Cross GCC
ໃນປັດຈຸບັນ GCC ຕ້ອງການແພັກເກດ GMP, MPFR ແລະ MPC. ເນື່ອງຈາກແພັກເກດເຫຼົ່ານີ້ອາດຈະບໍ່ລວມຢູ່ໃນການແຈກຢາຍເຈົ້າພາບຂອງເຈົ້າ, ພວກມັນຈະຖືກສ້າງດ້ວຍ GCC. ຖອດຊຸດແຕ່ລະແພັກເກັດເຂົ້າໄປໃນໄດເລກະທໍລີແຫຼ່ງ GCC ແລະປ່ຽນຊື່ໄດເລກະທໍລີຜົນໄດ້ຮັບເພື່ອໃຫ້ຂະບວນການສ້າງ GCC ຈະໃຊ້ພວກມັນໂດຍອັດຕະໂນມັດ:
ຫມາຍເຫດ
ມີຄວາມເຂົ້າໃຈຜິດເລື້ອຍໆກ່ຽວກັບບົດນີ້. ຂັ້ນຕອນການແມ່ນຄືກັນກັບທຸກບົດອື່ນໆທີ່ອະທິບາຍກ່ອນຫນ້ານີ້ (ຄໍາແນະນໍາການສ້າງຊຸດ). ທໍາອິດສະກັດ gcc tarball ຈາກໄດເລກະທໍລີແຫຼ່ງຂໍ້ມູນແລະຫຼັງຈາກນັ້ນປ່ຽນໄປຫາໄດເລກະທໍລີທີ່ສ້າງ. ພຽງແຕ່ຫຼັງຈາກນັ້ນທ່ານຄວນດໍາເນີນການກັບຄໍາແນະນໍາຂ້າງລຸ່ມນີ້.
ຫມາຍເຫດ
ມີຄວາມເຂົ້າໃຈຜິດເລື້ອຍໆກ່ຽວກັບບົດນີ້. ຂັ້ນຕອນການແມ່ນຄືກັນກັບທຸກບົດອື່ນໆທີ່ອະທິບາຍກ່ອນຫນ້ານີ້ (ຄໍາແນະນໍາການສ້າງຊຸດ). ທໍາອິດສະກັດ gcc tarball ຈາກໄດເລກະທໍລີແຫຼ່ງຂໍ້ມູນແລະຫຼັງຈາກນັ້ນປ່ຽນໄປຫາໄດເລກະທໍລີທີ່ສ້າງ. ພຽງແຕ່ຫຼັງຈາກນັ້ນທ່ານຄວນດໍາເນີນການກັບຄໍາແນະນໍາຂ້າງລຸ່ມນີ້.
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 ຂອງປະກອບມີເສັ້ນທາງຄົ້ນຫາ. ບັນຫາ:
ສໍາລັບໄຟລ໌ເຮັດ
cp -uv sed -e
-e
ສໍາລັບໄຟລ໌ເຮັດ
cp -uv sed -e
-e
ສຽງສະທ້ອນ '
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file ແຕະ $file.orig
ເຮັດ
ສຽງສະທ້ອນ '
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_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 ທໍາອິດ prepends “/tools” ກັບທຸກໆຕົວຢ່າງຂອງ “/lib/ld”, “/lib64/ld” ຫຼື “/lib32/ld”, ໃນຂະນະທີ່ອັນທີສອງປ່ຽນແທນຕົວຢ່າງທີ່ຍາກຂອງ “/usr”. ຕໍ່ໄປ, ພວກເຮົາເພີ່ມຄໍາກໍານົດຂອງພວກເຮົາທີ່ປ່ຽນແປງຄໍານໍາຫນ້າ startfile ໃນຕອນທ້າຍຂອງໄຟລ໌. ຈື່ໄວ້ວ່າ "/" ໃນ "/tools/lib/" ແມ່ນຕ້ອງການ. ສຸດທ້າຍ, ພວກເຮົາໃຊ້ ສໍາຜັດ ເພື່ອອັບເດດເວລາໃນໄຟລ໌ທີ່ສຳເນົາໄວ້. ເມື່ອໃຊ້ຮ່ວມກັບ cp -u, ນີ້ປ້ອງກັນການປ່ຽນແປງທີ່ບໍ່ຄາດຄິດກັບໄຟລ໌ຕົ້ນສະບັບໃນກໍລະນີທີ່ຄໍາສັ່ງຖືກດໍາເນີນການສອງຄັ້ງໂດຍບໍ່ໄດ້ຕັ້ງໃຈ.
ສຸດທ້າຍ, ໃນ x86_64 hosts, ຕັ້ງຊື່ໄດເລກະທໍລີເລີ່ມຕົ້ນສໍາລັບຫ້ອງສະຫມຸດ 64-bit ເປັນ "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 build cd build
mkdir -v build cd build
ກະກຽມ GCC ສໍາລັບການລວບລວມ:
../configure \
--target=$LFS_TGT \
--prefix=/ເຄື່ອງມື \
--with-glibc-version=2.11 \
--with-sysroot=$LFS \
--with-newlib \
--ບໍ່ມີສ່ວນຫົວ \
--with-local-prefix=/ເຄື່ອງມື \
--with-native-system-header-dir=/tools/include \
--disable-nls \
--disable-shared \
--disable-multilib \
--disable-decimal-float \
--disable-threads \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--enable-languages=c,c++
../configure \
--target=$LFS_TGT \
--prefix=/ເຄື່ອງມື \
--with-glibc-version=2.11 \
--with-sysroot=$LFS \
--with-newlib \
--ບໍ່ມີສ່ວນຫົວ \
--with-local-prefix=/ເຄື່ອງມື \
--with-native-system-header-dir=/tools/include \
--disable-nls \
--disable-shared \
--disable-multilib \
--disable-decimal-float \
--disable-threads \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--enable-languages=c,c++
ຄວາມຫມາຍຂອງຕົວເລືອກການຕັ້ງຄ່າ:
--with-newlib
ເນື່ອງຈາກຫ້ອງສະຫມຸດ C ທີ່ເຮັດວຽກຍັງບໍ່ທັນມີ, ນີ້ຮັບປະກັນວ່າຄົງທີ່ inhibit_libc ຖືກກໍານົດໃນເວລາທີ່ສ້າງ libgcc. ນີ້ປ້ອງກັນການລວບລວມລະຫັດໃດໆທີ່ຕ້ອງການການສະຫນັບສະຫນູນ libc.
-- ບໍ່ມີສ່ວນຫົວ
ເມື່ອສ້າງ cross-compiler ຄົບຖ້ວນ, GCC ຕ້ອງການ headers ມາດຕະຖານທີ່ເຫມາະສົມກັບລະບົບເປົ້າຫມາຍ. ສໍາລັບຈຸດປະສົງຂອງພວກເຮົາ headers ເຫຼົ່ານີ້ຈະບໍ່ຈໍາເປັນ. ສະວິດນີ້ປ້ອງກັນບໍ່ໃຫ້ GCC ຊອກຫາພວກມັນ.
--with-local-prefix=/ເຄື່ອງມື
ຄໍານໍາຫນ້າທ້ອງຖິ່ນແມ່ນສະຖານທີ່ຢູ່ໃນລະບົບທີ່ GCC ຈະຄົ້ນຫາສໍາລັບໄຟລ໌ທີ່ຕິດຕັ້ງຢູ່ໃນທ້ອງຖິ່ນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ / usr/ທ້ອງຖິ່ນ. ການຕັ້ງຄ່ານີ້ເປັນ / ເຄື່ອງມື ຊ່ວຍຮັກສາສະຖານທີ່ເຈົ້າພາບຂອງ / usr / ທ້ອງຖິ່ນ ອອກຈາກເສັ້ນທາງຄົ້ນຫາຂອງ GCC ນີ້.
--with-native-system-header-dir=/tools/include
ໂດຍການຊອກຫາ GCC ເລີ່ມຕົ້ນ / usr / ປະກອບມີ ສໍາລັບສ່ວນຫົວຂອງລະບົບ. ໂດຍສົມທົບກັບສະວິດ sysroot, ນີ້ປົກກະຕິຈະແປເປັນ $LFS/usr/ລວມ. ຢ່າງໃດກໍ່ຕາມ headers ທີ່ຈະຖືກຕິດຕັ້ງໃນສອງພາກຕໍ່ໄປຈະໄປຫາ $LFS/ເຄື່ອງມື/ຮວມ. ສະວິດນີ້ຮັບປະກັນວ່າ gcc ຈະຊອກຫາພວກມັນຢ່າງຖືກຕ້ອງ. ໃນການຜ່ານຄັ້ງທີສອງຂອງ GCC, ສະຫຼັບດຽວກັນນີ້ຈະຮັບປະກັນວ່າບໍ່ມີສ່ວນຫົວຈາກລະບົບເຈົ້າພາບ.
--disable-shared
ສະຫຼັບນີ້ບັງຄັບໃຫ້ GCC ເຊື່ອມຕໍ່ຫ້ອງສະໝຸດພາຍໃນຂອງຕົນຢ່າງສະຖິດ. ພວກເຮົາເຮັດສິ່ງນີ້ເພື່ອຫຼີກເວັ້ນບັນຫາທີ່ເປັນໄປໄດ້ກັບລະບົບເຈົ້າພາບ.
--disable-decimal-float, --disable-thread, --disable-libatomic, --disable- libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable- libstdcxx
ສະຫຼັບເຫຼົ່ານີ້ປິດການຮອງຮັບການຂະຫຍາຍຈຸດເລື່ອນເລກຖານສິບ, threading, libatomic, libgomp,
libquadmath, libssp, libvtv, ແລະຫ້ອງສະໝຸດມາດຕະຖານ C++ ຕາມລຳດັບ. ລັກສະນະເຫຼົ່ານີ້ຈະລົ້ມເຫລວໃນການລວບລວມໃນເວລາທີ່ສ້າງ cross-compiler ແລະບໍ່ຈໍາເປັນສໍາລັບວຽກງານຂອງ cross-compiler libc ຊົ່ວຄາວ.
--disable-multilib
ໃນ x86_64, LFS ຍັງບໍ່ຮອງຮັບການຕັ້ງຄ່າ multilib ເທື່ອ. ສະວິດນີ້ບໍ່ເປັນອັນຕະລາຍຕໍ່ x86.
--enable-languages=c,c++
ທາງເລືອກນີ້ເຮັດໃຫ້ແນ່ໃຈວ່າພຽງແຕ່ C ແລະ C ++ compilers ໄດ້ຖືກສ້າງຂຶ້ນ. ເຫຼົ່ານີ້ແມ່ນພາສາດຽວທີ່ຕ້ອງການໃນປັດຈຸບັນ.
ລວບລວມ GCC ໂດຍການແລ່ນ:
ເຮັດໃຫ້
ເຮັດໃຫ້
ການລວບລວມຂໍ້ມູນແມ່ນສໍາເລັດແລ້ວ. ໃນຈຸດນີ້, ຊຸດທົດສອບປົກກະຕິຈະດໍາເນີນການ, ແຕ່, ດັ່ງທີ່ໄດ້ກ່າວມາກ່ອນ, ກອບຊຸດທົດສອບຍັງບໍ່ທັນມີຢູ່. ຜົນປະໂຫຍດຂອງການແລ່ນການທົດສອບຢູ່ໃນຈຸດນີ້ແມ່ນຫນ້ອຍເພາະວ່າໂຄງການຈາກຄັ້ງທໍາອິດນີ້ຈະຖືກປ່ຽນແທນໃນໄວໆນີ້.
ຕິດຕັ້ງຊຸດ:
ເຮັດໃຫ້ຕິດຕັ້ງ
ເຮັດໃຫ້ຕິດຕັ້ງ