RHEL 6.7에 사용자 계정이 있습니다. 내장된 gcc는 c++11을 지원하지 않기 때문에 최신 gcc를 설치해 보았습니다. --prefix=$HOME/dependencies/gcc
, make
, 실행 구성을 사용 make install
하고 환경 변수를 업데이트했습니다.
declare -x LIBRARY_PATH="~/dependencies/gcc/lib64:$LIBRARY_PATH"
declare -x PATH="~/dependencies/gcc/bin/:$PATH"
gcc -v
이제 최신 버전(4.9.4 또는 5.5.0, 둘 다 시도함)이 표시되고 which gcc
예상되는 출력이 표시됩니다.
[user@host ~]$ which gcc
~/dependencies/gcc/bin/gcc
질문은 다음과 같습니다.
[user@host ~]$ g++ -std=c++11 -o test test.cpp
g++: error trying to exec 'cc1plus': execvp: No such file or directory
[user@host ~]$ ~/dependencies/gcc/bin/g++ -std=c++11 -o test test.cpp
[user@host ~]$
g++가 작동하려면 왜 전체 경로를 제공해야 하는지 궁금합니다. 버전을 실행 중이므로 strace
디버그 를 사용할 수 없습니다 . 어떤 아이디어가 있나요?strace g++
/usr/bin
고쳐 쓰다Knud Larsen이 제안한 대로 심볼릭 링크를 추가한 후 실행하여 strace strace g++55
다음 줄을 확인했습니다.
stat("~/dependencies/gcc/bin/g++55", 0x7ffcf17f9530) = -1 ENOENT (No such file or directory)
~
을 PATH
과 LIBRARY_PATH
으로 교체한 후 /home/user
모든 것이 잘 작동합니다.
답변1
물결표 문자는 인용할 때 확장되지 않습니다. 대신 실제 변수를 사용하십시오 $HOME
.
바라보다큰따옴표 안에서 물결표(~)가 확장되지 않는 이유는 무엇입니까?
개인적인 의견: 명령줄에서는 물결표를 자유롭게 사용할 수 있지만(인용되지 않는다는 점에 유의하세요) $HOME
스크립트를 사용하면 됩니다.