gcc जीएमपी, एमपीएफआर, एमपीसी, ईएलएफ के साथ साझा पुस्तकालयों के बिना जीसीसी टुकड़ा कैसे स्थापित करें?




elf gmp (5)

आसान तरीका

यदि आप एक सामान्य डेवलपर हैं, तो आप 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

कठिन मार्ग

जीसीसी का कहना है कि यहां का जवाब "कठिन तरीका" है क्योंकि यह टुकड़े से सब कुछ टुकड़ा बनाता है, और साझा पुस्तकालयों का उपयोग नहीं करता है।

जीसीसी बुनियादी ढांचा

जीसीसी बुनियादी ढांचा प्राप्त करें:

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

एक अस्थायी निर्देशिका में डाउनलोड डालें (आप जो भी निर्देशिका चाहते हैं उसका उपयोग कर सकते हैं)।

/opt/downloads

एक निर्देशिका निर्देशिका में बुनियादी ढांचे का निर्माण करें जो डाउनलोड निर्देशिका या इसकी उपनिर्देशिका से अलग है:

/tmp/gcc

इस तरह स्थिर पुस्तकालयों का उपयोग करके आधारभूत संरचना को कॉन्फ़िगर करें:

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

- अक्षम-साझा ध्वज आपकी आवश्यकताओं के आधार पर नज़दीकी रूप से दिखने योग्य हो सकता है। मैं उपयोग करता हूं - अक्षम-साझा क्योंकि मैं केवल स्थिर कोड बना रहा हूं, और मैं यह सुनिश्चित करना चाहता हूं कि मैं कोई साझा कोड नहीं बनाऊंगा। मेरी ज़रूरत है कि परिणामी जीसीसी को आसानी से मेरे ड्राइव के चारों ओर ले जाएं, इसलिए मुझे सभी स्थिर कोड चाहिए, और मुझे कोई साझा कोड नहीं चाहिए। यदि आप साझा कोड पसंद करते हैं, तो - साझा करने योग्य ध्वज को छोड़ दें।

संस्करण

जब आप इस उत्तर में किसी भी आदेश को चलाते हैं, तो मौजूदा जीसीसी संस्करण संख्या का उपयोग करने के लिए कमांड को अपडेट करना सुनिश्चित करें जो आपकी आवश्यकताओं से मेल खाता है। इस उत्तर में आदेश जीसीसी 4.6.2 के लिए हैं।

ध्यान दें कि जीसीसी दस्तावेज कहता है: "हालांकि आवश्यक औजारों का कोई भी नया संस्करण आमतौर पर काम करता है, लाइब्रेरी आवश्यकताएं आम तौर पर कठोर होती हैं। कुछ संस्करण कुछ मामलों में काम कर सकते हैं, लेकिन दस्तावेजों के सटीक संस्करणों का उपयोग करना सुरक्षित है।"

जीएमपी

जीएमपी जीएनयू एकाधिक प्रेसिजन अंकगणितीय पुस्तकालय है।

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

एमपीएफआर जीएनयू मल्टी-प्रेसिजन फ्लोटिंग-पॉइंट राउंडिंग लाइब्रेरी है। यह जीएमपी पर निर्भर करता है।

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

एमपीसी

एमपीसी जीएनयू मल्टी-प्रेसिजन सी लाइब्रेरी है। यह जीएमपी और एमपीएफआर पर निर्भर करता है।

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

ईएलएफ निष्पादन योग्य और लिंक करने योग्य प्रारूप के लिए खड़ा है। यह पुस्तकालय वास्तुकला-स्वतंत्र आकार और एंडियन समर्थन प्रदान करता है।

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

जीसीसी

जीसीसी जीएनयू कंपाइलर संग्रह है। यह जीएमपी, एमपीएफआर, एमपीसी, और ईएलएफ पर निर्भर करता है।

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

उसी माउंट पॉइंट पर स्क्रैच निर्देशिका में जीसीसी बनाएं। (इसे / tmp के भीतर बनाना क्रॉस संकलन होस्ट मुद्दों को ट्रिगर करेगा)

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

कॉन्फ़िगर कमांड और उसके झंडे एक कमांड लाइन पर होना चाहिए (यह पोस्ट उन्हें वेब पेज चौड़ाई के कारण अलग लाइनों पर दिखाता है)।

नोट: हम लाइब्रेरी पथ पर्यावरण चर सेट करने और सेट करने के लिए पूर्ण पथ का उपयोग नहीं करते हैं। हम बूटस्ट्रैप को अक्षम करना और साझा पुस्तकालयों को अक्षम करना चुनते हैं क्योंकि हम उन्हें नहीं चाहते हैं (विशिष्ट उपयोगकर्ता दोनों चाहते हैं), और पॉज़िक्स थ्रेड और डिफ़ॉल्ट रूप से झंडे का उपयोग करने के लिए क्योंकि हम उन्हें चाहते हैं (सामान्य उपयोगकर्ता अन्य धागे या स्किप का उपयोग करना चाहते हैं डिफ़ॉल्ट झंडे)। वाईएमएमवी और here झंडे के बारे में पढ़ें

/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

यह पृष्ठ जीसीसी स्थापना जानकारी, इसे कैसे बनाया जाए, विभिन्न झंडे, आदि के लिए बहुत अच्छा है:

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

अपडेट

पीपीएल पुस्तकालयों का उपयोग स्मृति अनुकूलन के लिए किया जा सकता है: bugseng.com/products/ppl/Download देखें (टिप्पणियों में धन्यवाद पॉल)

आप gcc स्रोत निर्देशिका से ./contrib/download_prerequisites चला सकते हैं। (Reddit पर एन 7 पी के लिए धन्यवाद)

मैं वर्तमान संस्करण का उपयोग कर, टुकड़ा द्वारा जीसीसी (जीएनयू कंपाइलर संग्रह) टुकड़ा कैसे स्थापित करूं?
निर्भरता के सही संस्करणों का उपयोग करके, पैकेज प्रबंधक (जैसे yum, rpm, apt, dpkg) का उपयोग नहीं करते, और साझा पुस्तकालयों का उपयोग नहीं करते?

विशिष्ट डेवलपर्स संभवतः जीसीसी को सामान्य तरीके से स्थापित करना चाहते हैं, अपने पैकेज मैनेजर (यम, आरपीएम, एपीटी, डीपीकेजी, पोर्ट, ब्रू इत्यादि) का उपयोग करें या यहां दिए गए निर्देशों का पालन करें ( http://gcc.gnu.org/wiki/InstallingGCC )।

मेरा सवाल है कि साझा पुस्तकालयों के बिना, टुकड़े से जीसीसी टुकड़ा कैसे स्थापित करें।

  • मैं एक पूरी तरह से स्वतंत्र जीसीसी चाहता हूं जिसे किसी भी साझा पुस्तकालयों का उपयोग किए बिना और किसी भी साझा पुस्तकालयों के निर्माण के बिना मेरे सिस्टम के चारों ओर स्थानांतरित किया जा सकता है।
  • जीसीसी ने "कठिन तरीका" कहा है और यह सामान्य उपयोगकर्ताओं के लिए अनुशंसित नहीं है।

जीसीसी इस पर निर्भर करता है:

  • जीएमपी: जीएनयू एकाधिक प्रेसिजन अंकगणितीय पुस्तकालय
  • एमपीएफआर: जीएनयू एकाधिक-परिशुद्धता फ्लोटिंग-पॉइंट राउंडिंग लाइब्रेरी
  • एमपीसी: जीएनयू मल्टी-प्रेसिजन सी लाइब्रेरी
  • ईएलएफ: निष्पादन योग्य और लिंक करने योग्य प्रारूप पुस्तकालय
  • पीपीएल: पर्मा पॉलीहेड्रा लाइब्रेरी (वैकल्पिक, स्मृति अनुकूलन के लिए)

उपर्युक्त जोनाथन ने उपरोक्त उल्लेख किया है, सिवाय इसके कि मुझे मैन्युअल रूप से 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

बीटीडब्ल्यू, "-with-gmp" और "with-mpfr" का उपयोग करके "./configure" ने मुझे "कॉन्फ़िगर किया: त्रुटि: ऑब्जेक्ट फ़ाइलों के प्रत्यय की गणना नहीं कर सकता: संकलित नहीं कर सकता"। इसलिए मैंने जीएमपी और एमपीपीआर के एसआरसीएस डाउनलोड किए और फिर जीसीसी स्रोत शीर्ष लेव डायर के भीतर से सॉफ्ट लिंक बनाया


मैंने जोएलपार्करहेन्डर्सन द्वारा शीर्ष स्वीकृत उत्तर का पालन किया। यह सबसे अच्छा जवाब है जिसे मैं इंटरनेट पर * NIX सिस्टम पर स्थापित करने के लिए पा सकता हूं।

वंशावली के लिए मैं यह जोड़ना चाहता हूं कि अगर आपको त्रुटि मिलती है जैसे "त्रुटि स्थापित करें: ऑब्जेक्ट फ़ाइलों के प्रत्यय की गणना नहीं कर सकता: संकलित नहीं कर सकता"

फिर अपने एलडी_LIBRBARY_PATH को / tmp / gcc / lib के साथ अपडेट करें (संदर्भ के लिए जोएलपार्करहेंडर्सन का पूरा उत्तर देखें)

/ tmp / gcc / lib में सभी आवश्यक mpfr / mpc / gmp शामिल हैं, इसलिए फ़ाइलें और रन टाइम लिंकर उन्हें तब तक नहीं ढूंढ सकते जब तक कि आप उन्हें LD_LIBRARY_PATH में नहीं जोड़ते। एलडी_LIBRARY_PATH निर्यात करने के लिए भी मत भूलना;)। यहां अधिक संदर्भ: https://gcc.gnu.org/wiki/FAQ#configure_suffix


मैं क्लस्टर पर काम करता हूं। केवल मास्टर नोड इंटरनेट से जुड़ा हुआ है। नोड्स पर सॉफ़्टवेयर पुराना है और आम तौर पर बनाए रखा नहीं जाता है। मेरे पास रूट पहुंच नहीं है। मेरे पास दो विकल्प हैं:

  • मुझे स्थिर सॉफ़्टवेयर बनाना (कम्प्यूटेशनल पैकेज); या
  • स्थिर कंपाइलर का निर्माण।

मैंने दूसरा और निर्मित जीसीसी, जी ++ और गोरफ्रान चुना।

मैंने सब कुछ बनाया

PREFIX=$HOME/cmp/soft/sft

और make के make मैंने इस्तेमाल किया

THREADS=8

नीचे, जीसीसी के साथ बनाया गया है

  • जीएमपी
  • MPFR
  • एमपीसी
  • आइएसएल
  • CLOOG

यहां से नवीनतम जीसीसी मिल सकता है: 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 "[email protected]" && eval cd "\"\$$#\""; }

नीचे दिए गए प्रत्येक आदेश को अभी डाउनलोड किए गए lib के dir में जारी किया जाना है।

जीएमपी

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

आइएसएल

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

जीसीसी

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

स्वीकृत उत्तर इसे आवश्यक से कहीं अधिक जटिल बनाता है और सभी संस्करणों के लिए सही नहीं है। --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

(लेकिन कृपया ऊपर दिए गए लिंक को पढ़ें, इसमें उपयोगी जानकारी है।)

स्पष्ट रूप से उबंटू के कुछ लोगों के पास उनके पर्यावरण में बहुत सारे बकवास हैं जो जीसीसी निर्माण प्रक्रिया में हस्तक्षेप करते हैं, और उन्हें पहले इसे हटाने की आवश्यकता है:

unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE LD_LIBRARY_PATH




mpc