PPA에서 g ++ 4.8을 다운로드했지만 기본값으로 설정할 수 없습니까?


15

우분투 12.10에서 g ++ 4.8을 다음과 같이 다운로드했습니다.

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-4.8

그러나 내가 할 때 :

sudo update-alternatives --config g++

g ++ 버전을 전환하려면 다음과 같이 말합니다.

update-alternatives: error: no alternatives for g++.

그러나 내가하는 경우 :

g++ --version

그것은 말한다 :

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

g ++ 4.8 설치를 기본 g ++로 설정하려면 어떻게합니까?

답변:


11

우선, 모든 도구의 4.8 바이너리가 어디에 있는지 확인해야합니다.

$ which gcc-4.8
/usr/bin/gcc-4.8
$ which g++-4.8
/usr/bin/g++-4.8
$ ls /usr/bin/*-4.8
/usr/bin/cpp-4.8         /usr/bin/x86_64-linux-gnu-cpp-4.8
/usr/bin/g++-4.8         /usr/bin/x86_64-linux-gnu-g++-4.8
/usr/bin/gcc-4.8         /usr/bin/x86_64-linux-gnu-gcc-4.8
/usr/bin/gcc-ar-4.8      /usr/bin/x86_64-linux-gnu-gcc-ar-4.8
/usr/bin/gcc-nm-4.8      /usr/bin/x86_64-linux-gnu-gcc-nm-4.8
/usr/bin/gcc-ranlib-4.8  /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.8
/usr/bin/gcov-4.8

이제 우리는 모든 바이너리를 가지고 있습니다. 이제 이러한 바이너리에 사용할 수있는 심볼릭 링크가 있는지 살펴 보겠습니다 :

$ cd /usr/bin
$ ls -l gcc* cpp g++
lrwxrwxrwx 1 root root      7 sep 18 14:02 cpp -> cpp-4.7
lrwxrwxrwx 1 root root      7 abr 22  2013 g++ -> g++-4.7
lrwxrwxrwx 1 root root      7 sep 18 14:02 gcc -> gcc-4.7

우리가 볼 수 있듯이, 단지 cpp, g++그리고 gcc상징적 링크가 있습니다. 여기에는 두 가지 옵션이 있습니다.

심 링크

심볼릭 링크를 심볼릭 링크로 바꾸고 먼저 실제 링크를 제거하십시오.

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++

그런 다음 우리를 만듭니다

sudo ln -s /usr/bin/cpp-4.8 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++

다시 되돌리려면 동일한 명령을 사용하지만 대신 4.7 또는 4.6을 사용하십시오.

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/cpp-4.7 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.7 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.7 /usr/bin/g++

내가 한 경우 : ls -l gcc * cpp g ++ 반환 : ls : gcc에 액세스 할 수 없음 * : 해당 파일 또는 디렉토리가 없습니다. ls : cpp에 액세스 할 수 없습니다 : 해당 파일 또는 디렉토리가 없습니다. ls : g ++에 액세스 할 수 없습니다 : 해당 파일이나 디렉토리가 없습니다.
user997112

사과가 필요하지 않습니다 :) remove 함수를 호출하면 작동하지만 "우리의"심볼릭 링크를 만들 때 sudo ln -s -T / usr / bin / cpp /usr/bin/cpp-4.8 ln : failed 심볼릭 링크 '`/usr/bin/cpp-4.8를 만들려면 다음 파일이 존재
user997112

(저는 기존 링크가 실제로 삭제되었다는 것을 확인 / 고소 할 때 두 번째로 rm 명령을 두 번 호출했습니다)
user997112

3
이것은 끔찍한 생각 입니다. gcc커널 모듈을 컴파일 하는 데 사용 하는 많은 프로그램이 있으며 커널 모듈이 컴파일 gcc되지 않은 일부 모듈 (예 : Nvidia)은 자동으로 충돌합니다 .
nbubis

1
@ nbubis 글쎄, 문제는 "g ++ 4.8 설치를 기본 g ++로 설정하는 방법은 무엇입니까?"입니다. 따라서 누가 이것을하는지 추정해야합니다. 반면에 어떤 대안을 제안 할 수 있습니까?
Braiam

16

당신은 할 필요가 update-alternatives다음 사용하려는 하나의 구성을 각 하나에 대한 기록을 작성하고, 당신이 C ++ 컴파일러를 가지고 있음을 알 수 있습니다. 이것은 다음과 같이 수행됩니다.

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6.3 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 40
sudo update-alternatives --config g++ 

이 시점부터 컴파일러를 전환 할 때 필요한 것은이 명령뿐입니다.

sudo update-alternatives --config g++

자세한 내용 man update-alternatives은 참조하십시오 .

출처 : 여러 gcc 인스턴스를 사용하는 방법


@Braiam 모든 패키지에서 같은 방식으로 수행 할 수 있습니다.
Radu Rădeanu

3
누군가 60과 40에 대해 자세히 설명 할 수 있습니까? 많은 장소에서 이것을 본 필자는
user997112

@ user997112 나는 당신이 남자를 읽을 것을 제안하지만, 당신이 70과 30을 더 좋아한다면, 70과 30을 사용하십시오 ...
Radu Rădeanu

1
@ user997112 우선 순위 번호이며 --auto를 사용할 때만 관련됩니다. 다음을 사용하여 몇 가지 예를 볼 수 있습니다.update-alternatives --display editor
Braiam

2
12.04에서 내가 얻을 : 갱신 - 대안 : 오류 : 다른 g ++ 마스터가 될 수 없습니다 : 그것은 GCC의 노예
rickfoosusa

9

이것은 마스터 및 슬레이브 (gcc 및 g ++) 대안을 생성하고 관리하는 방법에 대한 훌륭한 설명 과 단계별 지침입니다.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 
sudo update-alternatives --config gcc

우분투에 오신 것을 환영합니다! 이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Stormvirux

네가 옳아. 필수 부분을 추가했습니다
Anton K

1
그 노예 물건으로 내 하루를 구했습니다. tx
Lennart Rolland
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.