답변:
귀하 ~/.bashrc
또는 ~/.bash_profile
간단히 소스 도구에서 devtoolset과 함께 제공되는 "활성화"스크립트를 제공하십시오. 예를 들어, Devtoolset 2에서 명령은 다음과 같습니다.
source /opt/rh/devtoolset-2/enable
또는
source scl_source enable devtoolset-2
훨씬 더 효율적 : for 폭탄, 까다로운 껍질 없음
/opt/rh/devtoolset-7/enable
의 대안 source /opt/rh/devtoolset-4/enable
은
source scl_source enable devtoolset-4
위의 쉘 스크립트 scl_source
는 하드 코딩 된 경로를 사용하는 것보다 더 우아합니다 (다른 컴퓨터에서는 다를 수 있음). 그러나 용도 와 다른 것들 scl_source
때문에 덜 /opt/rh/devtoolset-4/enable
합니다 scl_source
.
사용하려면 scl_source
패키지를 업그레이드해야 할 수도 있습니다scl-utils
yum update scl-utils # old scl-utils versions miss scl_source
빠른 복사 붙여 넣기
echo 'source scl_source enable devtoolset-4' >> ~/.bashrc
# Do not forget to change the version ↑
호기심 많은 사람들을위한 소스 코드
scl_source
소스 코드 의 예 :
https://gist.github.com/bkabrda/6435016
scl_source
내 레드햇 7.1에 설치
#!/bin/bash
_scl_source_help="Usage: source scl_source <action> [<collection> ...]
Don't use this script outside of SCL scriptlets!
Options:
-h, --help display this help and exit"
if [ $# -eq 0 -o $1 = "-h" -o $1 = "--help" ]; then
echo "$_scl_source_help"
return 0
fi
if [ -z "$_recursion" ]; then
_recursion="false"
fi
if [ -z "$_scl_scriptlet_name" ]; then
# The only allowed action in the case of recursion is the same
# as was the original
_scl_scriptlet_name=$1
fi
shift 1
if [ -z "$_scl_dir" ]; then
# No need to re-define the directory twice
_scl_dir=/etc/scl/conf
if [ ! -e $_scl_dir ]; then
_scl_dir=/etc/scl/prefixes
fi
fi
for arg in "$@"; do
_scl_prefix_file=$_scl_dir/$arg
_scl_prefix=`cat $_scl_prefix_file 2> /dev/null`
if [ $? -ne 0 ]; then
echo "Can't read $_scl_prefix_file, $arg is probably not installed."
return 1
fi
# First check if the collection is already in the list
# of collections to be enabled
for scl in ${_scls[@]}; do
if [ $arg == $scl ]; then
continue 2
fi
done
# Now check if the collection isn't already enabled
/usr/bin/scl_enabled $arg > /dev/null 2> /dev/null
if [ $? -ne 0 ]; then
_scls+=($arg)
_scl_prefixes+=($_scl_prefix)
fi;
done
if [ $_recursion == "false" ]; then
_i=0
_recursion="true"
while [ $_i -lt ${#_scls[@]} ]; do
_scl_scriptlet_path="${_scl_prefixes[$_i]}/${_scls[$_i]}/${_scl_scriptlet_name}"
source "$_scl_scriptlet_path"
if [ $? -ne 0 ]; then
echo "Can't source $_scl_scriptlet_name, skipping."
else
export X_SCLS="${_scls[$_i]} $X_SCLS"
fi;
_i=$(($_i+1))
done
_scls=()
_scl_prefixes=()
_scl_scriptlet_name=""
_recursion="false"
fi
문제는 scl enable devtoolset-1.1 bash
새로운 bash 쉘 을 생성 한다는 것 입니다. .bashrc에 넣으면 새로운 셸 scl enable devtoolset-1.1 bash
이 생성됩니다. .bashrc 가로 드되고 .bashrc 가로 드됩니다. .bashrc 가로 드됩니다 ... Forkbomb!
.bashrc에서 다음과 같은 것을 원할 것입니다.
if [ "$(gcc -dumpversion)" != "4.7.2" ]; then
scl enable devtoolset-1.1 bash
fi
또는
if [ -z "$TRIEDSCLDEVTOOLSET" ]; then
export TRIEDSCLDEVTOOLSET=true
scl enable devtoolset-1.1 bash
fi
exit
두 번 해야합니다 .scl enable
.
scl enable
새 ssh 세션을 열 때마다 실행해야합니다 . 이 멍청한 질문에 대해 사과 드리지만 최신 버전을 기본값으로 설정하는 방법을 잘 모르겠습니다. 내 bash 프로파일에서 내 보내야 할 환경 변수가 있습니까?
sudo apt-get install gcc
입니다. CentOS에서 이것은 yum입니다 (예 :) sudo yum install gcc
.
sudo yum update && sudo yum install gcc
확인하고 할 것 gcc --version
입니다. 4.7이 아니면 devtoolset을 사용해야 할 것입니다. SCL에서 실행하지 않으려면 기본 gcc를 설치 제거한 sudo yum remove gcc
다음 devtoolset 디렉토리를 경로에 추가하십시오 (예 : export PATH=$PATH:/opt/centos/devtoolset-1.1/root/usr/bin
.bashrc). 그러면 devtoolset gcc4.7 을 입력 gcc
하거나 g++
얻을 수 있습니다.