g++
g++ は、 GNU GCC (GNUコンパイラコレクション) の C++ コンパイラコマンドです。
読み方
- g++
- じー ぷらす ぷらす、じー ぷらぷら
目次
概要
g++ は、GNU の GCC に含まれる C++ のコンパイラです。Unix や Windows で g++ コマンドとして利用します。
FreeBSD の場合、デフォルトで C++ コンパイラとして g++ がインストールされます。FreeBSD の g++ コマンドと c++ コマンドは、同じものです。 FreeBSD は、標準でコンパイラが付属していますが、 ports コレクションを利用して gcc (g++が含まれます)をインストールすることで、システム標準のコンパイラよりも新しいコンパイラを導入できます。 下記のコマンドでインストールできるgccが調べられます。
ls -d /usr/ports/lang/gcc*
システムのg++コマンドは、/usr/bin にあり、 ports からインストールした g++ は、 /usr/local/bin に配置されます。
CentOS の場合は、g++コマンドがデフォルトでは入っていません。yum コマンドで gcc-g++ パッケージをインストールすることで、g++コマンドが利用できます。
インストール
FreeBSDにインストールする場合
ports コレクションからインストールする場合
cd /usr/ports/lang/gcc sudo make install clean
pkgコマンドでインストールする場合
sudo pkg install gcc
portmasterコマンドでインストールする場合
sudo portmaster -y -d /usr/ports/lang/gcc
CentOSにインストールする場合
CentOS に yum コマンドでインストールする場合。
sudo yum -y install gcc-c++
コンパイル
バイナリを作成する
g++ foo.cpp
オブジェクトファイルを作成する
g++ -o foo.cpp
シェアードオブジェクトを作成する
g++ -shared -o libfoo.so foo.cpp
コンパイル最適化レベルを変更する
g++ -O foo.cpp g++ -O0 foo.cpp g++ -O2 foo.cpp g++ -O3 foo.cpp g++ -Os foo.cpp
プリプロセッサディレクティブを処理する
g++ -E foo.cpp
アセンブルして、アセンブリコードを得る
foo.cpp から GAS 形式のアセンブラ言語で記述された foo.s を得られます。
g++ -S foo.cpp
-g オプションを使用すると C++ ソースファイルの行番号が .loc に含まれます。 アセンブラ言語を読みたいときに便利です。しかし、 foo.s のコード量が非常に大きくなります。
g++ -g -S foo.cpp
実行例
$ g++ --version g++ (GCC) 4.2.1 20070831 patched [FreeBSD] Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ g++ --help Usage: g++ [options] file... Options: -pass-exit-codes Exit with highest error code from a phase --help Display this information --target-help Display target specific command line options (Use '-v --help' to display command line options of sub-processes) -dumpspecs Display all of the built in spec strings -dumpversion Display the version of the compiler -dumpmachine Display the compiler's target processor -print-search-dirs Display the directories in the compiler's search path -print-libgcc-file-name Display the name of the compiler's companion library -print-file-name=<lib> Display the full path to library <lib> -print-prog-name=<prog> Display the full path to compiler component <prog> -print-multi-directory Display the root directory for versions of libgcc -print-multi-lib Display the mapping between command line options and multiple library search directories -print-multi-os-directory Display the relative path to OS libraries -Wa,<options> Pass comma-separated <options> on to the assembler -Wp,<options> Pass comma-separated <options> on to the preprocessor -Wl,<options> Pass comma-separated <options> on to the linker -Xassembler <arg> Pass <arg> on to the assembler -Xpreprocessor <arg> Pass <arg> on to the preprocessor -Xlinker <arg> Pass <arg> on to the linker -combine Pass multiple source files to compiler at once -save-temps Do not delete intermediate files -pipe Use pipes rather than intermediate files -time Time the execution of each subprocess -specs=<file> Override built-in specs with the contents of <file> -std=<standard> Assume that the input sources are for <standard> --sysroot=<directory> Use <directory> as the root directory for headers and libraries -B <directory> Add <directory> to the compiler's search paths -b <machine> Run gcc for target <machine>, if installed -V <version> Run gcc version number <version>, if installed -v Display the programs invoked by the compiler -### Like -v but options quoted and commands not executed -E Preprocess only; do not compile, assemble or link -S Compile only; do not assemble or link -c Compile and assemble, but do not link -o <file> Place the output into <file> -x <language> Specify the language of the following input files Permissible languages include: c c++ assembler none 'none' means revert to the default behavior of guessing the language based on the file's extension Options starting with -g, -f, -m, -O, -W, or --param are automatically passed on to the various sub-processes invoked by g++. In order to pass other options on to these processes the -W<letter> options must be used. For bug reporting instructions, please see: <URL:http://gcc.gnu.org/bugs.html>.
コンパイルオプション
自分でg++をコンパイルして入れたときに、場合によっては、以下のようなエラーが出るかもしれません。自分でインストールしたGCCのライブラリが/usr/local/lib の下にインストールされている場合、ベースシステムのライブラリとリンクされ、以下の現象がおきます。
% g++49 -std=c++11 lambda_return2.cpp % ./a.out /usr/lib/libstdc++.so.6: version GLIBCXX_3.4.14 required by /tmplambda/a.out not found % ldd ./a.out ./a.out: libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x2806b000) libm.so.5 => /lib/libm.so.5 (0x28166000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x28181000) libc.so.7 => /lib/libc.so.7 (0x2818c000)
g++ 4.9なら以下のコマンドになります。
g++49 -g -ggdb -fPIC -std=c++11 -I/usr/local/lib/gcc49/include/c++ \ -I/usr/local/lib/gcc49/include/ -L/usr/local/lib/gcc49 \ -Wl,-rpath=/usr/local/lib/gcc49/ lambda_return2.cpp
g++ 4.8なら以下のコマンドになります。
g++48 -g -ggdb -fPIC -std=c++11 -I/usr/local/lib/gcc48/include/c++ \ -I/usr/local/lib/gcc48/include/ -L/usr/local/lib/gcc48 \ -Wl,-rpath=/usr/local/lib/gcc48/ lambda_return2.cpp
関連項目
ツイート