[gcc] 공유 라이브러리없이 GMP, MPFR, MPC, ELF를 사용하여 GCC를 하나씩 설치하는 방법은 무엇입니까?

패키지 관리자 (예 : yum, rpm, apt, dpkg)를 사용하지 않고 공유 라이브러리를 사용하지 않고 현재 버전을 사용하고 올바른 버전의 종속성을 사용하여 GCC (GNU 컴파일러 컬렉션)를 하나씩 설치하려면 어떻게해야 합니까?

일반적인 개발자는 일반적인 방법으로 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 (옵션, 메모리 최적화 용)


답변

쉬운 방법

일반적인 개발자라면 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

downloads 디렉터리 또는 하위 디렉터리와 다른 임시 디렉터리에 인프라를 빌드합니다.

/tmp/gcc

다음과 같은 정적 라이브러리를 사용하여 인프라를 구성하십시오.

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

–disable-shared 플래그는 필요에 따라 자세히 살펴볼 가치가 있습니다. 정적 코드 만 빌드하고 있기 때문에 –disable-shared를 사용하고 공유 코드를 빌드하지 않았는지 확인하고 싶습니다. 내 필요는 결과 GCC를 내 드라이브에서 쉽게 이동하는 것이므로 모든 정적 코드를 원하고 공유 코드를 원하지 않습니다. 공유 코드를 선호하는 경우 –disable-shared 플래그를 생략하십시오.

버전

이 답변의 명령 중 하나를 실행할 때 필요에 맞는 현재 GCC 버전 번호를 사용하도록 명령을 업데이트하십시오. 이 답변의 명령은 GCC 4.6.2 용입니다.

GCC 문서에는 “충분히 새로운 버전의 필수 도구가 일반적으로 작동하지만 라이브러리 요구 사항은 일반적으로 더 엄격합니다. 경우에 따라 새 버전이 작동 할 수 있지만 문서화 된 정확한 버전을 사용하는 것이 더 안전합니다.”

GMP

GMP는 GNU 다중 정밀도 산술 라이브러리입니다.

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

MPC는 GNU 다중 정밀도 C 라이브러리입니다. 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는 실행 가능 및 링크 가능 형식을 나타냅니다. 이 라이브러리는 아키텍처 독립적 인 크기와 엔디안 지원을 제공합니다.

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 컴파일러 컬렉션입니다. 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

configure 명령과 플래그는 모두 하나의 명령 줄에 있어야합니다 (이 게시물은 웹 페이지 너비 때문에 별도의 줄에 표시됨).

참고 : 전체 경로를 사용하여 라이브러리 경로 환경 변수를 구성하고 설정하지 않습니다. 우리는 부트 스트랩을 비활성화하고 공유 라이브러리를 비활성화하기로 선택합니다 (일반 사용자는 둘 다 원할 수 있음), 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에게 감사드립니다)

gcc 소스 디렉토리에서 ./contrib/download_prerequisites를 실행할 수 있습니다. (reddit의 N7P에 감사드립니다)


답변

허용되는 대답은 필요 이상으로 훨씬 더 복잡하게 만들고 모든 버전에 대해 정확하지 않습니다. 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


답변

나는 클러스터에서 작업합니다. 마스터 노드 만 인터넷에 연결됩니다. 노드의 소프트웨어는 오래되어 일반적으로 유지되지 않습니다. 루트 액세스 권한이 없습니다. 두 가지 옵션이 있습니다.

  • 필요한 정적 소프트웨어 (컴퓨팅 패키지)를 빌드합니다. 또는
  • 정적 컴파일러를 빌드하십시오.

두 번째를 선택하고 gcc, g ++ 및 gfortran을 빌드했습니다.

나는 모든 것을 내장했다

PREFIX=$HOME/cmp/soft/sft

그리고 make내가 사용

THREADS=8

아래에서 gcc는

  • GMP
  • MPFR
  • MPC
  • 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

다음 bash 함수가 아래에 사용됩니다.

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

아래의 각 명령은 방금 다운로드 한 lib의 dir에서 실행됩니다.

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

MPC

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


답변

내가 수동으로 gmp와 mpfr을 다운로드하고 소프트 링크를 만들어야한다는 점을 제외하고는 위에서 Jonathan이 언급 한 것을 사용했습니다 (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”와 함께 사용하면 “configure : error : cannot compute suffix of object files : cannot compile”이 발생했습니다. 따라서 gmp 및 mpfr의 srcs를 다운로드 한 다음 gcc src top leve dir 내에서 소프트 링크를 만들었습니다.


답변

GMP, MPFRMPC를 포함한 GCC 종속성 설치를 시도한 후 . 추가 설치 요구 사항, 오류 및 누락 된 파일이 발생했습니다. MPFR이 설치하는 데 필요한 gmp.h 헤더 파일과 같은. 그 과정에서 직면하게 될 많은 문제가 있습니다. 그러나 빌드하고 설치하는 쉬운 방법이있다 GCC-X.0.0 또는 나중에 와 버전을 자동 연결 .

옵션 1.

make로 빌드하는 문제를 해결하려면 동적 라이브러리를 설치하고 연결하기 만하면됩니다.

  • GCC-X.0.0 버전을 다운로드하십시오 (최신 버전 : https://gcc.gnu.org/ ).

  • gcc-X-000.tar.gz 파일을 / somepath / 위치에 추출하십시오.

  • .tar.gz 파일을 추출했으면 / somepath / 또는 소스 디렉토리에있는 ./contrib/download_prerequisites 스크립트를 실행 하십시오 .

  • 이 스크립트는 GMP, MPFRMPC를 포함한 지원 라이브러리를 다운로드 하고 gcc 설치 프로세스의 일부로 모든 gcc 종속성을 자동으로 빌드 하는 Symlink생성 합니다 .

    Make, Make Install을 실행하거나 ./configure 파일을 실행 하거나 –with-gmp = / gmp_path / … / …..와 같은 링크를 추가 하여 / somepath /에 다운로드 된 라이브러리를 빌드 및 링크 할 필요가 없습니다 . , –with-mpfr = / mpfr_path / … / … 심볼릭 링크 를 생성 한 스크립트를 실행할 때 수행 되었기 때문 입니다.

옵션 2 :

  • OS 패키지 관리 시스템을 사용하여 표준 시스템 위치에 지원 라이브러리를 설치합니다. Ubuntu를 포함한 Debian 기반 시스템의 경우 libgmp-dev, libmpfr-devlibmpc-dev 패키지를 설치합니다. Fedora 및 SUSE를 포함한 RPM 기반 시스템의 경우 gmp-devellibmpc-devel ( SUSE의 mpc-devel ) 패키지를 설치합니다.
  • 이 옵션은 GCC를 빌드 할 때 자동으로 발견되는 표준 시스템 디렉토리에 라이브러리와 헤더 파일을 설치합니다.
  • 이것은 “sudo apt-get install libgmp-dev” 또는 “sudo apt-get install libmpfr-dev” 설치를 호출 하고 링크가 자동으로 수행 될 때 OS 패키지 설치 관리의 장점입니다 . 또한 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

주의 :

–c ++ 또는 c와 같은 언어를 활성화합니다 .

–disable-multilib ; 시스템 및 OS에 따라 multilib를 비활성화하면 계속 진행하려면 multilib에 대한 메시지가 표시됩니다.

완료하는 데 오랜 시간이 걸립니다. 그러나 -j #no_pro 옵션을 실행할 수 있습니다. 그러면 PC 또는 Mac의 프로세서 수에 따라 동시에 Make가 동시에 실행됩니다.

이 프로세스를 실행하는 방법에 대한 자세한 정보는 https://gcc.gnu.org/wiki/InstallingGCC를 방문
하십시오 .


답변

나는 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를 참조하세요.


답변