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
スクリプトを使用してください。