GCC-쉘 스크립트를 설치 리눅스

GUN 컴파일러 컬렉션 GCC는 컴파일러뿐만 아니라,라고, 그것은 또한 다른 도구가 포함되어 있습니다, 그것을 할 수있는 컴퓨터가 직접 실행할 수있는 바이너리 코드로 구축하는 인간에 의해 사용되는 높은 수준의 언어로 작성된 소스 코드에 쉽게. GCC는 사실상의 표준 리눅스 플랫폼 컴파일러, 가장 일반적으로 사용되는 리눅스 플랫폼 컴파일러입니다. 한편, 리눅스 플랫폼에서 임베디드 개발 분야에서, GCC 컴파일러의 가장 일반적인 유형을 사용하고 있습니다. 그것은 다른 대상 다양한 아키텍처를 지원할 수 있기 때문에 GCC가 널리 사용되는 이유. 예를 들어, 모두 크로스 컴파일러 지원 (이 플랫폼에 컴파일 간단한 플랫폼 컴파일러 말하자면) 호스트의 개발을 지원하는 (즉, 플랫폼 A는 플랫폼 B에 사용하기 위해 컴파일 된 프로그램이다). 현재 GCC 등등 X86 시리즈, 팔, PowerPC와 일반 40 개 이상의 종류, 아키텍처를 지원합니다. 한편, GCC는 등등 리눅스, 솔라리스, 윈도우와 같은 다른 운영 체제에서 실행할 수 있습니다.

C 언어를 지원하는 위, GCC 추가 이외의 이야기뿐만 아니라, 또한 등등 가서, 같은 C ++, 에이다, 자바, 오브젝티브 C, FORTRAN, 파스칼 등의 다양한 언어를 지원합니다.

컴파일 많은 응용 프로그램이 GCC를 설치해야 할 때 기본적으로, 일반적으로 사용되는 버전은 설치 명령을 통해 이렇게 빨리 매우 높은되지 않습니다 :

냠 -y GCC-C를 설치 ++

그러나 일부 응용 프로그램은 GCC의 컴파일 시간의 상위 버전을 필요로,이 시간은 기본적으로 만 설치를 컴파일 할 수 있으며, 설치가 매우 귀찮은 GCC 컴파일러, 컴파일러는, 특별히 준비의 설치를 성공적으로 촉진하는 것입니다 설치의 버전을 지정하는 몇 가지 구성 요소에 의존 할 필요가 설치 쉘 스크립트, 스크립트 무인 설치는 물론, 설치 프로세스가 일시적으로 스크립트를 컴파일 할 길이의 비트 만 (냠 설치 구성 요소를 명령 다른 시스템을 신속하게 조정할 필요에 따라 설치 CentOS는 시스템 (시스템 버전 5 테스트되었습니다 7)을 지원하다 및 해당 설치 패키지 이름)

#! / 빈 / bash는 
# 공식 웹 사이트 https://gcc.gnu.org/ 
# 
# 다운로드 (거울) 
# https://gcc.gnu.org/mirrors.html 
# 
#은 설명 의존 
#에 https를 : // GCC. gnu.org/install/prerequisites.html 
# 
# 명령 매개 변수 
는 다음 통과 최신 버전을 다운로드하지 않는 경우, 설치 버전을 지정 # $ 1, 최신 버전은 새로운 새로운 
#의 

#GCC 버전 번호는 
GCC_VERSION = $ (1) 
# GCC 설치 기본 디렉토리 
"= INSTALL_BASE / usr / 지방 / GCC / " 
# 필요한 라이브러리베이스 디렉토리 
INSTALL_PACKAGE_BASE ="/ usr / 지방 / " 
# GCC 컴파일러에 배치 
GCC_CONFIGURE_WITH = ' 
# 미러 주소 
MIRRORS_URL ="http://mirror.linux-ia64.org/gnu / GCC " 

IF [-z $ 1] || [[$ (1) =="새로운 새로운 "]]하며 다음 
    ! 에코"GCC 버전 "비어 
    에코"최신 안정 버전을 ...";
    GCC_VERSION =`컬 $ MIRRORS_URL / 릴리스 / 2> & 1 | 그렙 -P '.. gcc- \ D + \ \ D + \ \ D +'-o | 꼬리 -n 1 | 그렙 -P '.. \ D + \ \ D + \ \ D +'-o` 
    [-z 경우 "$의 GCC_VERSION 「다음으로 
        获取版失败에코 ""! 
        출구 
    Fi를 
    경우 [$ (1) -z] 다음 
        $ GCC_VERSION 에코 
        출구 
    과학 
Fi를 
하면 [ "$ INSTALL_BASE $ GCC_VERSION / 빈 / gcc가"-e]을 한 후 
    에코 "이미 gcc- $의 GCC_VERSION를 설치!" 
    출구 
Fi를 

OLD_PATH =`pwd`에 
경우 [[ "$ 0"으로 = ~ '/']]; 다음 
    CD "`에코"$ 0 "으로 | 그렙 -P '(? / [^ /] + /) +'-o`"

만약 [ ! -d "GCC"] 다음 
    에서 mkdir GCC 
과학 
CD를 GCC 
[경우! -e "gcc- $ GCC_VERSION.tar.gz"]; 다음 
    의 PHP #download 
    "다운로드 gcc- $ GCC_VERSION.tar.gz"에코; 
    wget을 $ MIRRORS_URL / 릴리스 / gcc- $ GCC_VERSION / gcc- $ GCC_VERSION.tar.gz 2> & 1 
인터넷 
[경우! -d "gcc- $의 GCC_VERSION"]; 다음 
    #decompression 
    "압축 해제 gcc- $ GCC_VERSION.tar.gz"에코; 
    타르 -zxf gcc- $ GCC_VERSION.tar.gz 
Fi를 
[만약! -d "gcc- $의 GCC_VERSION"]; 다음 
    "gcc- $의 GCC_VERSION의 디렉토리가없는 존재한다"에코 
    출구 
Fi를 

에코 "의존도를 설치를"

ntpdate를 -u ntp.api.bz 

# 동안循环使用的是管道,会开启子进程,无法修改外部的变量

PACKAGE_LISTS =`고양이 gcc- $ GCC_VERSION /있는 contrib / download_prerequisites | 그렙 -P '\ - \ D + \ \ D + (\ \ D +.) \ tar'`.?. 
'에코 -e $ PACKAGE_LISTS`에서 LINE에 
할 일 
    PACKAGE_VERSION_FILE =`에코 $ 라인 | 그렙 -P '\ w + \ - .?.. \ D + \ \ D + (. \ \ D +) \ 타르 \ (BZ2 | GZ) '-o` 
    PACKAGE ='$ 에코의 PACKAGE_VERSION_FILE | 그렙 -P '^ \ +'-o` w 
    PACKAGE_VERSION_DIR = '에코 $ PACKAGE_VERSION_FILE | 그렙 -P '\ w + \ - \ D + \ \ D + (\ \ D +.).? -o` 
    PACKAGE_VERSION =`에코 $의 PACKAGE_VERSION_DIR | 그렙 -P '\ D + \ \ D + (\ \ D +.).? -o` 
    PACKAGE_CONFIGURE_WITH = $ GCC_CONFIGURE_WITH 
    GCC_CONFIGURE_WITH = "$ PACKAGE_CONFIGURE_WITH --with- $ PACKAGE = $의 INSTALL_PACKAGE_BASE의 $ 패키지 / $의 PACKAGE_VERSION"
    "$의 PACKAGE_VERSION_DIR 설치"에코 
    [ "$ INSTALL_PACKAGE_BASE PACKAGE $ / $의 PACKAGE_VERSION"-d] 만약 단계; 다음 
        에코 "$ PACKAGE_VERSION_DIR 이미 설치"; 
        잇다; 
    Fi를 
    [만약! -e "$ PACKAGE_VERSION_FILE"]; 다음 
        #download 패키지 
        에코 "다운로드 $의 PACKAGE_VERSION_FILE"; 
        wget을 $ MIRRORS_URL / 인프라 / $ PACKAGE_VERSION_FILE 2> & 1 
    인터넷 
    [경우! -d "$ PACKAGE_VERSION_DIR"]; 다음 
        #decompression 
        "압축 해제 $의 PACKAGE_VERSION_FILE을"에코; 
        만약 [-n "`에코 $의 PACKAGE_VERSION_FILE | 그렙 -P '\에 .gz $'`"];
            타르 -xf $ PACKAGE_VERSION_FILE의 
        과학 
    Fi를 
    [만약! -d "$ PACKAGE_VERSION_DIR"]; 다음 
        "$ PACKAGE_VERSION_DIR의 디렉토리가 존재하지 않습니다"에코 
        출구 
    과학 
    CD를 $의 PACKAGE_VERSION_DIR을 
    경우 [[ "$의 패키지" 
        .. ^ =] + GMP / \ D + \ \ D + \ \ D + 그렙 -P "| = '--with-GMP-프리픽스 =`에코 $의 PACKAGE_CONFIGURE_WITH PACKAGE_CONFIGURE_WITH을 "-o` 
    인터넷 
    에코"./configure를 --prefix = $ INSTALL_PACKAGE_BASE PACKAGE $ / $ PACKAGE_VERSION $ PACKAGE_CONFIGURE_WITH " 
    ./configure를 --prefix = $ INSTALL_PACKAGE_BASE PACKAGE $ / $ PACKAGE_VERSION $ PACKAGE_CONFIGURE_WITH 2> 1 & 
    메이크업 2> 1 & 
    메이크업 설치 2 > 및 1 
    [경우! -d "$ INSTALL_PACKAGE_BASE $ 패키지 / $의 PACKAGE_VERSION"] || [-z "
        "! $ 패키지 - $ PACKAGE_VERSION 실패 설치"에코 
        종료 
    Fi를 사용 
    하며 다음 [[ "$의 PACKAGE"== "ISL"]]이 경우 
        ". MV lib 디렉토리 / * 평 파일"에코 
        의 주가에 영향을 미칠 것입니다 # 지우기 평 파일을 동적 링크 라이브러리의 ldconfig 명령이 실패 
    하는 경우 [-d "$ INSTALL_PACKAGE_BASE $ 패키지 lib 디렉토리 / $ PACKAGE_VERSION /"] && [-z "`고양이 /etc/ld.so.conf|grep"$ INSTALL_PACKAGE_BASE $ 패키지 / $의 PACKAGE_VERSION "`"] 다음,
            만약 [ "$ PY_FILE"-e] && [ "$ PY_FILE"-n] 다음 
                "MV $ PY_FILE $ INSTALL_PACKAGE_BASE $ PACKAGE / $의 PACKAGE_VERSION"에코 
                MV $ PY_FILE $ INSTALL_PACKAGE_BASE $ PACKAGE / $ PACKAGE_VERSION 
            인터넷 
        이루어 
    인터넷 
    #共享的动态链接库,加载配置
        /etc/ld.so.conf를 >> 에코 "$ INSTALL_PACKAGE_BASE $ 패키지 / $ PACKAGE_VERSION / lib에" 
        의 ldconfig 
    과학 
    CD ../ 
완료 

CD gcc- $ GCC_VERSION는 
"GCC를 설치"에코 
클린 2을> & 1 
#需要禁用multilib系统64位
경우 [-n "`UNAME -a | 그렙 -P 'EL \ D + \ X \ D + _ \ D +.'-o | 그렙 x86_64에의 -o`"];다음 
    GCC_CONFIGURE_WITH = $ GCC_CONFIGURE_WITH '--disable-multilib' 
파이

#新版需要下载配置文件
[경우! -e "./configure를"] && [ "./contrib/download_prerequisites"] -e 후 
    ./contrib/download_prerequisites 
     MKDIR GCC-화장 TMP 
     CD-GCC 화장 TMP  
    에코 "..
    ../configure --prefix = $ INSTALL_BASE $ GCC_VERSION $ GCC_CONFIGURE_WITH 2> & 1 
다른 
    에코 "./configure를 --prefix = $ INSTALL_BASE $ GCC_VERSION $ GCC_CONFIGURE_WITH" 
    ./configure를 --prefix = $ INSTALL_BASE $ GCC_VERSION $ GCC_CONFIGURE_WITH 2> & 1 
인터넷 

HTREAD_NUM =`lscpu | 그렙 스레드 | 그렙 - P -o` '\ d 개 + $' 
-j $ HTREAD_NUM 2> & 1 할 
메이크업은 2를 설치> & 1 개 

# 체크 상태를 설치 
[경우! -d "$ INSTALL_BASE $ GCC_VERSION"] || [-z " 
    에코 "[오류] gcc- $의 GCC_VERSION 실패 설치를"; 
    "$ INSTALL_BASE $ GCC_VERSION / lib64에">> /etc/ld.so.conf에 에코 
    에코 "MV lib64에를 / *. 평 파일" 
    #清除평文件,这些文件会影响共享的动态链接库ldconfig를命令执行失败
    PY_FILE에 대한 $ INSTALL_BASE $ GCC_VERSION / lib64에 / -name을 찾을 수`에서 "* 평"
    은 / etc / 프로필 소스의 / etc / 프로필 
    냠 ++ -y C GCC를-제거 
    에코 "gcc- $의 GCC_VERSION 성공을 설치합니다!"; 
Fi를


사용 방법 :

루트 계정에서 쉘 스크립트 파일을 같은 .sh로 접미사 작성 : gcc-install.sh를하고 설치 코드가 위의 기록 저장합니다.

설치 명령

bash는 gcc-install.sh 새로운

시스템이 설치 실패에 너무 작은 리드를 의존하는 경우, 설치 스크립트의 설치 디렉토리 구성 변경에 갈 수있다 (매우 적절하지 설치 될 수있는 시스템 종속성을 테스트하는 예로서 여기에) 해당 종속성을 증가시킬 필요가 설치가 성공 성공적인 설치 사본을 팁.


추천

출처blog.51cto.com/php2012web/2432093