인디노트

Linux - update-alternatives 본문

개발 플랫폼 및 언어

Linux - update-alternatives

인디개발자 2019. 3. 15. 15:40

참조 : https://blog.thinkbee.kr/linux/linux-update-alternatives/


update-alternative 사용

여러 버전의 gcc를 update-alternative를 사용해서 선택적으로 사용할 수 있다. gcc 로 등록된 현재 버전 목록을 질의 한다.

$ update-alternatives --query gcc




GCC 설치의 예 

sudo apt-get update
sudo apt-get install gcc-4.7 g++-4.7
sudo apt-get install gcc-4.8 g++-4.8



등록

여기서 사용하는 여러 gcc 버전들을 설치한 후에 다음과 같은 명령어로 등록을 할 수 있다.

update-alternatives --install <link> <name> <path> <priority>


sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8


sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 50 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7


설정된 버전 표기

$ sudo update-alternatives --list gcc
/usr/bin/gcc-4.8
/usr/bin/gcc-5


$ sudo update-alternatives --display gcc



gcc 버전 교체하기

이렇게 gcc 버전들을 등록해서 설정한 후에 gcc를 교체해서 사용할 수 있다. --config 옵션을 주고 목록에 있는 gcc 버전을 선택한다.

$ update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-4.8   20        auto mode
  1            /usr/bin/gcc-4.8   20        manual mode
  2            /usr/bin/gcc-5     10        manual mode

Press <enter> to keep the current choice[*], or type selection number: 2


$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.



삭제

설정한 내역을 지워버리고 싶을 때에는 --remove 옵션을 사용한다.

$ sudo update-alternatives --remove <name> <path>


sudo update-alternatives --remove-all gcc



테스트

update-alternatives --config arm-linux-gnueabihf 로 교체해서 다음을 컴파일 해보자.

hello world

#include "stdio.h"
 
int main(void) {
  printf("Hello world !\n");
  return 0;
}


$ arm-linux-gnueabihf-gcc hello.c -o hello


hello world c++

#include "iostream"
 
using namespace std;
 
int main(int argc, char *argv[]) {
    cout << "Hello world !" << endl;
    return 0;
}


g++로 컴파일 하고

$ arm-linux-gnueabi-g++ hello.cc -o hello


C++ std 14

아래는 std++14 이상 컴파일이 필요한 lambda 제너릭 코드이다.

// Generic lambda is C++14 code
#include <iostream>

int main()
{
    auto lambda = [](auto x){ return x; };
    std::cout << lambda("Hello generic lambda!\n");
    return 0;
}


g++-4.9를 사용해서

위 코드를 표준 C++ 로 컴파일 하면 아래 같이 구문 분석에서 에러가 난다.

$ g++ -std=c++1y test_cpp14.cpp -o test_cpp14
hello_cpp14.cpp:6:27: error: parameter declared ‘auto’


c++14 옵션을 사용해서

$ g++ -std=c++14 test_cpp14.cpp -o test_cpp14


반응형
Comments