cc, gcc, g++の違い
C++は初心者なので調べたことをメモ.
C++のコンパイルに使うcc, gcc, g++コマンドの違いについて(Ubuntu 18.04)
元ネタ:
c++ - Difference between CC, gcc and g++? - Stack Overflow
c++ - What is the difference between g++ and gcc? - Stack Overflow
まず,gccとg++の違い.これはC用とC++用の違いである.
なお,gccとg++はともにGNU Compiler Collection(Wikipedia)のcompiler-driver(コンパイラを呼び出すプログラム).
ただし,実体としては,g++はgccにオプションを追加して呼び出すことと同じ.
どちらも,ファイルタイプによって実際にどのコンパイラ (cc1, cc1plus.順にC,C++のコンパイラ) を呼び出すかを自動で決定する(-x language
で上書き可能).
しかし,g++とgccは,デフォルトでリンクするライブラリなどに違いがある.
g++
はgcc -xc++ -lstdc++ -shared-libgcc
と同等.これは,-v
オプションを付けることで確認できる.
オプションの意味 (Using the GNU Compiler Collection (GCC): Link Options)
-xc++
は,これ以降に書かれたオプションをc++
リンカに渡す.-lstdc++
は,リンクの時にstdc++
ライブラリを探す.-shared-libgcc
は,sharedまたはstaticバージョンのlibgccを使う(よくわからない).
結局,gccとg++の動作の違い
- gccは,
*.c
ファイルをC言語として,*.cpp
ファイルをC++としてコンパイル - g++は,
*.c
ファイルも*.cpp
もC++としてコンパイル - g++は,リンクの時にstd C++ライブラリをリンク(gccはしない)
ccとは
ccコマンドの意味はプラットフォームによって異なる
- Solarisでは,
CC
はSun C++ compilerの名前 - Solarisでは,
cc
はSun C compilerの名前 - Linuxでは,(あれば)
CC
はおそらくg++
へのリンク - Linuxでは,
cc
はgcc
へのリンク
Ubuntu 18.04での結果.なおCCは無かった.
$ sudo update-alternatives --config cc There is only one alternative in link group cc (providing /usr/bin/cc): /usr/bin/gcc Nothing to configure.