จะติดตั้ง GCC ทีละชิ้นด้วย GMP, MPFR, MPC, ELF โดยไม่ใช้ไลบรารีที่ใช้ร่วมกันได้อย่างไร


115

ฉันจะติดตั้ง GCC (GNU Compiler Collection) ทีละชิ้นได้อย่างไรโดยใช้เวอร์ชันปัจจุบัน
โดยใช้การอ้างอิงเวอร์ชันที่ถูกต้องโดยไม่ใช้ตัวจัดการแพ็คเกจ (เช่น yum, rpm, apt, dpkg) และไม่ใช้ไลบรารีที่แชร์

นักพัฒนาทั่วไปมักต้องการติดตั้ง GCC ด้วยวิธีทั่วไปใช้ตัวจัดการแพ็คเกจของคุณ (yum, rpm, apt, dpkg, port, brew ฯลฯ ) หรือทำตามคำแนะนำที่นี่ ( http://gcc.gnu.org/wiki/ การติดตั้ง GCC )

คำถามของฉันคือวิธีติดตั้ง GCC ทีละชิ้นโดยไม่ใช้ไลบรารีที่ใช้ร่วมกัน

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

GCC ขึ้นอยู่กับ:

  • GMP: GNU ไลบรารีเลขคณิตที่แม่นยำหลายรายการ
  • MPFR: GNU ไลบรารีการปัดเศษทศนิยมหลายจุดที่มีความแม่นยำสูง
  • MPC: GNU ไลบรารี C หลายความแม่นยำ
  • ELF: ไลบรารีรูปแบบปฏิบัติการและลิงก์ได้
  • PPL: Parma Polyhedra Library (ทางเลือกสำหรับการเพิ่มประสิทธิภาพหน่วยความจำ)

คำตอบ:


123

วิธีง่ายๆ

หากคุณเป็นนักพัฒนาทั่วไปคุณสามารถติดตั้งวิธีง่ายๆโดยใช้คำแนะนำที่http://gcc.gnu.org/wiki/InstallingGCCหรือตัวจัดการแพ็คเกจระบบของคุณเช่น:

apt  install gcc  # for Debian, Ubuntu, etc.
yum  install gcc  # for RedHat, CentOS, etc.
brew install gcc  # for Mac OS X

วิธีที่ยาก

GCC กล่าวว่าคำตอบที่นี่คือ "วิธีที่ยาก" เพราะสร้างทุกอย่างทีละชิ้นและไม่ใช้ไลบรารีที่แชร์

โครงสร้างพื้นฐาน GCC

รับโครงสร้างพื้นฐาน GCC:

ftp://gcc.gnu.org/pub/gcc/infrastructure/

ใส่การดาวน์โหลดในไดเรกทอรีชั่วคราว (คุณสามารถใช้ไดเร็กทอรีใดก็ได้ที่คุณต้องการ)

/opt/downloads

สร้างโครงสร้างพื้นฐานในไดเร็กทอรี temp ที่แตกต่างจากไดเร็กทอรีดาวน์โหลดหรือไดเร็กทอรีย่อย:

/tmp/gcc

กำหนดค่าโครงสร้างพื้นฐานโดยใช้ไลบรารีแบบคงที่ดังนี้:

./configure --disable-shared --enable-static --prefix=/tmp/gcc

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

รุ่น

เมื่อคุณเรียกใช้คำสั่งใด ๆ ในคำตอบนี้อย่าลืมอัปเดตคำสั่งเพื่อใช้หมายเลขเวอร์ชัน GCC ปัจจุบันที่ตรงกับความต้องการของคุณ คำสั่งในคำตอบนี้ใช้สำหรับ GCC 4.6.2

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

GMP

GMP คือ GNU Multiple Precision Arithmetic Library

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
bunzip2 gmp-4.3.2.tar.bz2
tar xvf gmp-4.3.2.tar
cd gmp-4.3.2
./configure --disable-shared --enable-static --prefix=/tmp/gcc
make && make check && make install

MPFR

MPFR คือไลบรารีการปัดเศษทศนิยมหลายจุดของ GNU ขึ้นอยู่กับ GMP

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
bunzip2 mpfr-2.4.2.tar.bz2
tar xvf mpfr-2.4.2.tar
cd mpfr-2.4.2
./configure --disable-shared --enable-static --prefix=/tmp/gcc --with-gmp=/tmp/gcc
make && make check && make install

คณะกรรมการนโยบายการเงิน

MPC คือไลบรารี C หลายความแม่นยำของ GNU ขึ้นอยู่กับ GMP และ MPFR

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
tar zxvf mpc-0.8.1.tar.gz
cd mpc-0.8.1
./configure --disable-shared --enable-static --prefix=/tmp/gcc --with-gmp=/tmp/gcc --with-mpfr=/tmp/gcc
make && make check && make install

เอลฟ์

ELF ย่อมาจาก Executable and Linkable Format ไลบรารีนี้มีขนาดที่ไม่ขึ้นกับสถาปัตยกรรมและการสนับสนุน endian

wget http://www.mr511.de/software/libelf-0.8.13.tar.gz
tar zxvf libelf-0.8.13.tar.gz
cd libelf-0.8.13
./configure --disable-shared --enable-static --prefix=/tmp/gcc
make && make check && make install

GCC

GCC คือ GNU Compiler Collection ขึ้นอยู่กับ GMP, MPFR, MPC และ ELF

wget http://www.netgull.com/gcc/releases/gcc-4.6.2/gcc-4.6.2.tar.gz
tar zxvf gcc-4.6.2.tar.gz

สร้าง gcc ในไดเร็กทอรีขูดบนจุดเชื่อมต่อเดียวกัน (การสร้างภายใน / tmp จะทำให้เกิดปัญหาโฮสต์คอมไพล์ข้าม)

mkdir -p /opt/downloads/gcc-4.6.2-scratch
cd /opt/downloads/gcc-4.6.2-scratch

คำสั่งกำหนดค่าและแฟล็กต้องอยู่ในบรรทัดคำสั่งเดียว (โพสต์นี้แสดงในบรรทัดแยกจากกันเพียงเพราะความกว้างของหน้าเว็บ)

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

/opt/downloads/gcc-4.6.2/configure
  --disable-shared
  --disable-bootstrap
  --disable-libstdcxx-pch
  --enable-languages=all
  --enable-libgomp
  --enable-lto
  --enable-threads=posix
  --enable-tls
  --with-gmp=/tmp/gcc
  --with-mpfr=/tmp/gcc
  --with-mpc=/tmp/gcc
  --with-libelf=/tmp/gcc
  --with-fpmath=sse
make && make install

หน้านี้เหมาะสำหรับข้อมูลการติดตั้ง GCC วิธีการสร้างแฟล็กต่างๆและอื่น ๆ :

http://www.acsu.buffalo.edu/~charngda/cc_build.html

อัพเดท

สามารถใช้ไลบรารี ppl เพื่อเพิ่มประสิทธิภาพหน่วยความจำได้ที่ bugseng.com/products/ppl/Download (ขอบคุณ Paul ในความคิดเห็น)

คุณสามารถเรียกใช้. /contrib/download_prerequisites จากไดเร็กทอรีต้นทาง gcc (ขอบคุณ N7P บน reddit)


2
ฉันต้องแน่ใจว่าได้อัปเดตหมายเลขเวอร์ชันด้านบนสำหรับ GCC 4.6.3 ใหม่ (หรืออะไรก็ตามที่เป็นปัจจุบันเมื่อคุณทำสิ่งนี้)
joelparkerhenderson

12
คุณสามารถเรียกใช้. /contrib/download_prerequisites จากไดเร็กทอรีต้นทาง gcc ความคิดเห็นนี้ต้องขอบคุณ N7P บน Reddit
joelparkerhenderson

3
ไม่ bootstrapping ไม่ได้ขึ้นอยู่กับมัน ควรใช้ --disable-shared สำหรับการสร้าง GMP, MPFR และ MPC แต่ไม่ใช่สำหรับ GCC เอง (และการใช้สคริปต์ download_prerequisites หมายความว่าคุณไม่จำเป็นต้องสร้าง GMP, MPFR และ MPC ด้วยตนเอง) การสร้าง GCC มักจะสร้าง libs แบบคงที่และ libs ที่ใช้ร่วมกันโดยค่าเริ่มต้น - ปิดการใช้งานที่ใช้ร่วมกันหมายความว่าคุณไม่ได้รับ libs ที่แชร์ซึ่งเป็นตัวเลือกที่ผิดสำหรับคนส่วนใหญ่
Jonathan Wakely

8
--disable-sharedผิดสำหรับคนส่วนใหญ่--disable-bootstrapอาจเร่งความเร็วในการสร้าง แต่อาจทำให้ล้มเหลวขึ้นอยู่กับเวอร์ชัน gcc ที่มีอยู่ซึ่ง--enable-libgompเปิดใช้งานโดยค่าเริ่มต้นอย่างไรก็ตาม--enable-ltoเปิดใช้งานโดยค่าเริ่มต้น--enable-thread-safeไม่ใช่ตัวเลือกที่ถูกต้อง--enable-threads=posixเปิดใช้งานโดยค่าเริ่มต้นในบางแพลตฟอร์มไม่สามารถใช้ได้กับแพลตฟอร์มอื่น , --enable-tlsเปิดใช้งานโดยค่าเริ่มต้น ... โดยทั่วไปคำแนะนำเหล่านี้จะสวยดี
โจนาธาน Wakely

1
คุณสามารถใช้ Linuxbrew เพื่อติดตั้ง gcc (และเป็นทางเลือก glibc) ในโฮมไดเร็กทอรีของคุณด้วยbrew install gccไฟล์. ดูlinuxbrew.sh
Shaun Jackman

118

คำตอบที่ได้รับการยอมรับทำให้มันห่างไกลความซับซ้อนเกินกว่าที่จำเป็นและไม่ถูกต้องสำหรับทุกรุ่น การสร้าง GCC ด้วย--disable-sharedมักจะเป็นความคิดที่แย่มาก ดูhttp://gcc.gnu.org/wiki/InstallingGCCสำหรับแนวทางที่ง่ายขึ้น

ทั้งกระบวนการควรจะไม่ยากกว่านี้ (เปลี่ยน 4.6.2 กับรุ่นที่คุณต้องการสร้าง):

tar xzf gcc-4.6.2.tar.gz
cd gcc-4.6.2
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-4.6.2/configure --prefix=$HOME/GCC-4.6.2 
make
make install

(แต่โปรดอ่านลิงก์ด้านบนเนื่องจากมีข้อมูลที่เป็นประโยชน์)

เห็นได้ชัดว่าบางคนใน Ubuntu มีอึจำนวนมากที่ตั้งอยู่ในสภาพแวดล้อมของพวกเขาซึ่งรบกวนกระบวนการสร้าง GCC และพวกเขาจำเป็นต้องลบสิ่งนั้นออกก่อน:

unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE LD_LIBRARY_PATH

2
ไม่ไม่มีขั้นตอนที่ขาดหายไป
Jonathan Wakely

2
@ user2023370 GCC รู้วิธีค้นหาส่วนหัวและไลบรารีของตัวเองทั้งหมดแน่นอน คุณต้องตั้งค่า LD_LIBRARY_PATH เพื่อบอกไดนามิกลิงค์เกอร์ว่าจะค้นหาไลบรารีได้อย่างไร (เนื่องจากเมื่อคุณเรียกใช้ GCC ที่ปฏิบัติการได้จะไม่เกี่ยวข้องอีกต่อไป) โปรดดูที่gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths
Jonathan Wakely

2
@einpoklum แล้ว "อะไรทำนองนี้" ของคุณก็ไม่เหมือนเดิม ขั้นตอนข้างต้นใช้ได้ผล พวกเขาทำงานให้ฉันเป็นประจำกับ GCC ทุกเวอร์ชัน พวกเขาทำงานกับคนหลายร้อยคน
Jonathan Wakely

3
สำหรับการอ้างอิงในอนาคตสิ่งนี้ใช้ได้กับฉันสำหรับ gcc-5.4.0 สิ่งเดียวที่ไม่ได้กล่าวถึงคือฉันต้องทำunset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE LD_LIBRARY_PATHก่อนอย่างอื่นตามที่แนะนำไว้ที่นี่: stackoverflow.com/questions/12255058/…
Cantfindname

4
สิ่งนี้ใช้ได้ผลสำหรับฉันกับ gcc 6.2.0 และควรเป็นคำตอบที่ยอมรับอย่างแน่นอน! (ใช้งานได้กับระบบปฏิบัติการ / เวอร์ชัน ฯลฯ )
David Doria

25

ฉันทำงานกับคลัสเตอร์ เฉพาะโหนดหลักเท่านั้นที่เชื่อมต่อกับอินเทอร์เน็ต ซอฟต์แวร์บนโหนดล้าสมัยและโดยทั่วไปไม่ได้รับการบำรุงรักษา ฉันไม่มีสิทธิ์เข้าถึงรูท ฉันมีสองทางเลือก:

  • สร้างซอฟต์แวร์คงที่ฉันต้องการ (แพ็คเกจการคำนวณ); หรือ
  • สร้างคอมไพเลอร์แบบคงที่

ฉันเลือกตัวที่สองและสร้าง gcc, g ++ และ gfortran

ฉันสร้างทุกอย่างใน

PREFIX=$HOME/cmp/soft/sft

และสำหรับmakeฉันใช้

THREADS=8

ด้านล่าง gcc สร้างขึ้นด้วยไฟล์

  • GMP
  • MPFR
  • คณะกรรมการนโยบายการเงิน
  • ISL
  • CLOOG

สามารถรับ gcc ล่าสุดได้จากที่นี่: ftp://gcc.gnu.org/pub/gcc/releases

การอ้างอิงมีอยู่ที่นี่: ftp://gcc.gnu.org/pub/gcc/infrastructure

การอ้างอิง

ฉันได้รับการอ้างอิงด้วยสคริปต์ต่อไปนี้:

#!/bin/sh

# ===========
## variables:

GMP=gmp-4.3.2.tar.bz2
MPFR=mpfr-2.4.2.tar.bz2
MPC=mpc-0.8.1.tar.gz
ISL=isl-0.12.2.tar.bz2
CLOOG=cloog-0.18.1.tar.gz

MIRROR=ftp://gcc.gnu.org/pub/gcc/infrastructure


# ===========
## functions:

extract() {
    if [ -f $1 ]; then
        case $1 in
            *.tar.bz2)   tar xvjf $1    ;;
            *.tar.gz)    tar xvzf $1    ;;
            *.bz2)       bunzip2 $1     ;;
            *.rar)       unrar x $1     ;;
            *.gz)        gunzip $1      ;;
            *.tar)       tar xvf $1     ;;
            *.tbz2)      tar xvjf $1    ;;
            *.tgz)       tar xvzf $1    ;;
            *.zip)       unzip $1       ;;
            *.Z)         uncompress $1  ;;
            *.7z)        7z x $1        ;;
            *)           echo "I don't know how to extract '$1'..." ;;
        esac
    else
        echo "'$1' is not a valid file!"
    fi
}

# ======================
## download and extract:

wget $MIRROR/$GMP
extract $GMP

wget $MIRROR/$MPFR
extract $MPFR

wget $MIRROR/$MPC
extract $MPC

wget $MIRROR/$ISL
extract $ISL

wget $MIRROR/$CLOOG
extract $CLOOG

ใช้ฟังก์ชันทุบตีต่อไปนี้ด้านล่าง:

mkdircd () { mkdir -p "$@" && eval cd "\"\$$#\""; }

คำสั่งแต่ละคำสั่งด้านล่างจะออกใน dir ของ lib ที่เพิ่งดาวน์โหลด

GMP

mkdircd build
../configure --disable-shared --enable-static --prefix=$PREFIX/gmp
make -j $THREADS && make check && make install

MPFR

mkdircd build
../configure --with-gmp=$PREFIX/gmp --disable-shared --enable-static --prefix=$PREFIX/mpfr
make -j $THREADS && make install

คณะกรรมการนโยบายการเงิน

mkdircd build
../configure --with-gmp=$PREFIX/gmp --with-mpfr=$PREFIX/mpfr --disable-shared --enable-static --prefix=$PREFIX/mpc
make -j $THREADS && make install

ISL

mkdircd build
../configure --with-gmp-prefix=$PREFIX/gmp --disable-shared --enable-static --prefix=$PREFIX/isl
make -j $THREADS && make install

CLOOG

mkdircd build
../configure --with-gmp-prefix=$PREFIX/gmp --with-isl-prefix=$PREFIX/isl --disable-shared --enable-static --prefix=$PREFIX/cloog
make -j $THREADS && make install

GCC

mkdircd build
export LD_LIBRARY_PATH=$PREFIX/gmp/lib:$PREFIX/mpfr/lib:$PREFIX/mpc/lib:$PREFIX/isl/lib:$PREFIX/cloog/lib
export C_INCLUDE_PATH=$PREFIX/gmp/include:$PREFIX/mpfr/include:$PREFIX/mpc/include:$PREFIX/isl/include:$PREFIX/cloog/include
export CPLUS_INCLUDE_PATH=$PREFIX/gmp/include:$PREFIX/mpfr/include:$PREFIX/mpc/include:$PREFIX/isl/include:$PREFIX/cloog/include
../configure --with-gmp=$PREFIX/gmp --with-mpfr=$PREFIX/mpfr --with-mpc=$PREFIX/mpc --with-isl=$PREFIX/isl --with-cloog=$PREFIX/cloog --disable-shared --enable-static --disable-multilib --prefix=$PREFIX/gcc --enable-languages=c,c++,fortran
make -j $THREADS bootstrap && make install

1
สิ่งนี้ซับซ้อนโดยไม่จำเป็นขั้นตอนในคำตอบของฉันยังสร้าง GCC ที่เชื่อมโยงแบบคงที่โดยไม่ต้องเข้าถึงรูทและคุณไม่จำเป็นต้องตั้งค่าLD_LIBRARY_PATHให้ใช้ GCC ที่เป็นผลลัพธ์
Jonathan Wakely

นอกจากนี้ยังใช้งานได้ในสถานการณ์ที่มีความขัดแย้งกับสิ่งที่ติดตั้งในพา ธ ที่ "กำหนดไว้อย่างดี" (เช่นกรณีที่ขั้นตอนมาตรฐานไม่สามารถทำงานได้ทันที) เวอร์ชันล่าสุด ณ วันที่ 2017-06-19: gmp-6.1.2 mpfr-3.1.5 mpc-1.0.3 isl-0.16.1 cloog-0.18.4 gcc-7.1.0
Michael Goldshteyn

7

ใช้สิ่งที่โจนาธานกล่าวไว้ข้างต้นยกเว้นว่าฉันต้องดาวน์โหลด gmp และ mpfr ด้วยตนเองและสร้างซอฟต์ลิงก์ (การแจกจ่าย gcc 4.4.2 อาจไม่มี "download_prerequisites")

cd src/gcc-4.4.2
ln -s ~/linux64/gmp-4.2.1  gmp
ln -s ~/linux64/mpfr-2.3.0 mpfr

Btw โดยใช้ "-with-gmp" และ "with-mpfr" กับ "./configure" ให้ฉัน "กำหนดค่า: ข้อผิดพลาด: ไม่สามารถคำนวณส่วนต่อท้ายของไฟล์อ็อบเจ็กต์: ไม่สามารถคอมไพล์" ดังนั้นฉันจึงดาวน์โหลด srcs ของ gmp และ mpfr จากนั้นสร้างซอฟต์ลิงก์ไปยังมันจากภายใน gcc src top leve dir


2

หลังจากพยายามติดตั้งการอ้างอิง GCC รวมถึงGMP, MPFRและMPC ฉันพบข้อกำหนดการติดตั้งเพิ่มเติมข้อผิดพลาดและไฟล์ที่ขาดหายไป เช่นไฟล์ส่วนหัว gmp.h ที่ MPFR ต้องการเพื่อติดตั้ง มีปัญหาหลายประการที่คุณจะพบในกระบวนการนี้ แต่มีวิธีที่ง่ายต่อการสร้างและติดตั้งเป็นGCC-X.0.0หรือต่อมารุ่นที่มีการเชื่อมโยงโดยอัตโนมัติการเชื่อมโยงโดยอัตโนมัติ

ตัวเลือกที่หนึ่ง

หากต้องการบันทึกปัญหาในการสร้างด้วย make ให้ทำการติดตั้งและเชื่อมโยงไลบรารีแบบไดนามิกเพียง:

  • ดาวน์โหลด GCC-X.0.0 -version ของคุณ (พร้อมเวอร์ชันล่าสุดจาก: https://gcc.gnu.org/ )

  • แตกไฟล์ gcc-X-000.tar.gz ไปยังตำแหน่ง / somepath /

  • เมื่อคุณแตกไฟล์. tar.gz แล้วให้รันสคริปต์. / contrib/download_prerequisitesซึ่งอยู่บน / somepath / หรือไดเร็กทอรีต้นทาง

  • สคริปต์นี้จะดาวน์โหลดไลบรารีการสนับสนุนซึ่งรวมถึง: GMP, MPFRและMPCและจะสร้างSymlinksสำหรับคุณซึ่งจะสร้างการอ้างอิง gcc ทั้งหมดโดยอัตโนมัติโดยเป็นส่วนหนึ่งของกระบวนการติดตั้ง gcc

    ไม่จำเป็นต้อง Build and Link รองรับไลบรารีที่ดาวน์โหลดไปยัง / somepath / โดยการออกMake, Make Installหรือเรียกใช้ไฟล์. / กำหนดค่าหรือเพิ่มลิงค์เช่น --with-gmp = / gmp_path / ... / ..... , --with-mpfr = / mpfr_path / ... / ... เพราะนี้คือทำเมื่อคุณรันสคริปต์ที่สร้างsymlinks

ตัวเลือกที่สอง

  • ใช้ระบบการจัดการ OS Package ของคุณเพื่อติดตั้งไลบรารีสนับสนุนในตำแหน่งระบบมาตรฐาน สำหรับการตามระบบ Debian รวมทั้ง Ubuntu, ติดตั้งlibgmp-dev, libmpfr-devและlibmpc-devแพคเกจ สำหรับระบบที่ใช้ RPM รวมถึง Fedora และ SUSE ให้ติดตั้งแพ็คเกจ gmp-devel และlibmpc-devel ( mpc-develบน SUSE)
  • ตัวเลือกนี้จะติดตั้งไลบรารีและไฟล์ส่วนหัวในไดเร็กทอรีระบบมาตรฐานซึ่งจะพบได้โดยอัตโนมัติเมื่อสร้าง GCC
  • นี่เป็นข้อดีของการจัดการการติดตั้ง OS Package เมื่อคุณเรียกใช้การติดตั้งและการเชื่อมโยง"sudo apt-get install libgmp-dev"หรือ"sudo apt-get install libmpfr-dev" นอกจากนี้คุณไม่จำเป็นต้องสร้างไลบรารีสนับสนุนด้วยMake, Make installหรือ. /configure นอกจากนี้กระบวนการนี้ยังใช้เวลาไม่กี่นาทีในการดำเนินการทั้งหมด
  • ตอนนี้คุณสามารถดำเนินการติดตั้ง GCC ได้

การกำหนดค่า:

This is the GCC config Process, with gcc-X-000.tar.gz 

ปัญหา:

tar -xvf gcc-X-000.tar.gz 
cd gcc-X-000
./contrib/download_prerequisites
cd ..
mkdir objdir
/../gcc-X-000/configure --prefix=$HOME/gcc-X-000 --enable-languages=c,c++,fortran,go --disable-multilib
make -j 2
make install

หมายเหตุ:

--enable-languagesเช่น c ++ หรือ c

- ปิดการใช้งานมัลติลิบ ; ปิดการใช้งาน multilib ตามระบบและ OS ของคุณคุณจะได้รับแจ้งเกี่ยวกับ multilib เพื่อดำเนินการต่อ

ทำจะใช้เวลานานในการดำเนินการ อย่างไรก็ตามคุณสามารถออกตัวเลือก -j #no_pro การดำเนินการนี้จะเรียกใช้ Make พร้อมกันแบบขนานตามจำนวนโปรเซสเซอร์บนพีซีหรือ Mac ของคุณ

สำหรับข้อมูลรายละเอียดเกี่ยวกับวิธีการดำเนินการขั้นตอนนี้สามารถเข้าชม: https://gcc.gnu.org/wiki/InstallingGCC


1

ฉันทำตามคำตอบที่ได้รับการยอมรับสูงสุดโดย joelparkerhenderson นี่คือคำตอบที่ดีที่สุดที่ฉันสามารถหาได้จากการติดตั้งบนระบบ * NIX ทางอินเทอร์เน็ต

สำหรับรุ่นหลังฉันต้องการเพิ่มว่าหากคุณได้รับข้อผิดพลาดเช่น "ข้อผิดพลาดในการติดตั้ง: ไม่สามารถคำนวณส่วนต่อท้ายของไฟล์อ็อบเจ็กต์: ไม่สามารถคอมไพล์"

จากนั้นอัปเดต LD_LIBRBARY_PATH ของคุณด้วย / tmp / gcc / lib (ดูคำตอบทั้งหมดของ joelparkerhenderson สำหรับบริบท)

/ tmp / gcc / lib มี mpfr / mpc / gmp ที่จำเป็นทั้งหมดดังนั้นไฟล์และตัวเชื่อมโยงเวลาทำงานจะไม่สามารถค้นหาได้เว้นแต่คุณจะเพิ่มลงใน LD_LIBRARY_PATH อย่าลืมส่งออก LD_LIBRARY_PATH;) บริบทเพิ่มเติมที่นี่: https://gcc.gnu.org/wiki/FAQ#configure_suffix


การต้องอัปเดต LD_LIBRARY_PATH ของคุณเพียงเพื่อใช้คอมไพเลอร์นั้นเป็นเรื่องโง่ หากคุณใช้stackoverflow.com/a/10662297/981959แทนก็ไม่จำเป็น
Jonathan Wakely
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.