「gcc」の版間の差分
(→gccコマンドの裏側) |
|||
行7: | 行7: | ||
== 概要 == | == 概要 == | ||
[[gcc]]は、Cコンパイラのコマンド、もしくは、GNU Cコンパイラのパッケージです。C++言語用のg++コマンドなども提供されます。 | [[gcc]]は、Cコンパイラのコマンド、もしくは、GNU Cコンパイラのパッケージです。C++言語用のg++コマンドなども提供されます。 | ||
− | |||
== gccコマンドの裏側 == | == gccコマンドの裏側 == | ||
普段、なにげなく実行している[[gcc]]コマンドさんですが、[[gcc]] がなんでもかんでもやっているのではなく、 [[gcc]] は、他のプログラムを呼び出して、処理をしてもらっています。 | 普段、なにげなく実行している[[gcc]]コマンドさんですが、[[gcc]] がなんでもかんでもやっているのではなく、 [[gcc]] は、他のプログラムを呼び出して、処理をしてもらっています。 | ||
行41: | 行40: | ||
/usr/local/libexec/gcc49/gcc/x86_64-portbld-freebsd10.0/4.9.1/cc1 | /usr/local/libexec/gcc49/gcc/x86_64-portbld-freebsd10.0/4.9.1/cc1 | ||
− | |||
== コンパイル方法 == | == コンパイル方法 == | ||
C言語のソースファイルをコンパイルするには、ターミナルで以下の様なコマンドを実行します。 | C言語のソースファイルをコンパイルするには、ターミナルで以下の様なコマンドを実行します。 | ||
行63: | 行61: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
となります。 | となります。 | ||
− | |||
== 複数のバージョンのGCCの共存 == | == 複数のバージョンのGCCの共存 == | ||
[[FreeBSD]](たいていのLinuxでも)では、複数のバージョンのGCCコンパイラが共存できます。 | [[FreeBSD]](たいていのLinuxでも)では、複数のバージョンのGCCコンパイラが共存できます。 | ||
行82: | 行79: | ||
gcc-ar49 gcc-nm49 gcc-ranlib49 gcc47 | gcc-ar49 gcc-nm49 gcc-ranlib49 gcc47 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | == gcc 5.1 == | ||
+ | * Cのデフォルトモードが -std=gnu89(GNU89)から-std=gnu11(ISO C11ベースのGNU11)に変更されました。 | ||
+ | * C++ランタイムライブラリlibstdc++では、新しいAPIをデフォルトで利用します。 | ||
+ | * [[OpenMP]] 4.0のオフロード機能がサポートされました。 | ||
+ | * [[OpenACC]] 2.0a の初期実装 | ||
+ | * [[Cilk Plus]] を完全サポート | ||
== gcc 4.10 == | == gcc 4.10 == | ||
* 2014/04 からステージ1がはじまりました。 | * 2014/04 からステージ1がはじまりました。 | ||
− | |||
== gcc 4.9 == | == gcc 4.9 == | ||
* 2014/04/22 にリリースされました。 | * 2014/04/22 にリリースされました。 | ||
行97: | 行99: | ||
* C++では、C++11, C++14のサポートしました。 | * C++では、C++11, C++14のサポートしました。 | ||
− | |||
== インストール == | == インストール == | ||
=== FreeBSDの場合 === | === FreeBSDの場合 === |
2015年4月23日 (木) 23:25時点における版
gcc とは、GNUのC/C++コンパイラのパッケージ、もしくは、Cコンパイラのコマンドです。Windows, Linux, FreeBSDなど様々な環境で利用できます。Windowsでは、CygwinやMinGWなどをインストールして利用できます。
読み方
- gcc
- じーしーしー
目次
概要
gccは、Cコンパイラのコマンド、もしくは、GNU Cコンパイラのパッケージです。C++言語用のg++コマンドなども提供されます。
gccコマンドの裏側
普段、なにげなく実行しているgccコマンドさんですが、gcc がなんでもかんでもやっているのではなく、 gcc は、他のプログラムを呼び出して、処理をしてもらっています。
gccコマンドは、Cプログラムのコンパイルの過程で、
- プリプロセッサディレクティブを処理
- アセンブリコードへ変換
- 機械語へ変換
- オブジェクトを結合します。
gccは、内部的に外部コマンドを呼び出しています。
- cpp
- cc1
- as
- ld
clangに移行する前までのFreeBSD(10未満)では、/usr/libexec/cc1 がありましたが、すでにありません。
$ cpp a.c -o a.i $ /usr/libexec/cc1 a.i -o a.s $ as a.s -o a.o $ ld \ -lc \ /usr/lib/crt1.o \ /usr/lib/crtbegin.o \ /usr/lib/crtend.o \ /usr/lib/crtendS.o \ /usr/lib/crti.o \ /usr/lib/crtn.o \ a.o \ -o a.out
/usr/local/libexec/gcc49/gcc/x86_64-portbld-freebsd10.0/4.9.1/cc1
コンパイル方法
C言語のソースファイルをコンパイルするには、ターミナルで以下の様なコマンドを実行します。
$ gcc main.c
Unix環境(FreeBSD, Linux)のOSでは、出力ファイルを指定しない場合は、デフォルトで、 a.out というファイルを作成します。Windows 環境(MinGW)では、a.exe が作成されます。
作成されたファイルは、ターミナルで以下のように実行します。
$ ./a.out
Windowsの場合は、以下の通りです。.exe は省略しても構いません。
c:\c>a.exe
もしくは
c:\c>a
となります。
複数のバージョンのGCCの共存
FreeBSD(たいていのLinuxでも)では、複数のバージョンのGCCコンパイラが共存できます。
下記の例では、GCC 4.6, 4,7, 4.9 が同居しています。
$ pkg info |ag gcc gcc-4.7.3_1 GNU Compiler Collection 4.7 gcc-ecj-4.5 Eclipse Java Compiler used to build GCC Java gcc46-4.6.4_1,1 GNU Compiler Collection 4.6 gcc49-4.9.1.s20140507 GNU Compiler Collection 4.9
zshの入力補完の例ですが、gccの名前のあとにバージョン番号がそれぞれ付与されたコマンドが用意されています。必要に応じて、任意の番号のついたgccコマンドを実行することで、複数のバージョンのgccを使い分けることができます。
$ gcc gcc-ar47 gcc-nm47 gcc-ranlib47 gcc46 gcc49 gcc-ar49 gcc-nm49 gcc-ranlib49 gcc47
gcc 5.1
- Cのデフォルトモードが -std=gnu89(GNU89)から-std=gnu11(ISO C11ベースのGNU11)に変更されました。
- C++ランタイムライブラリlibstdc++では、新しいAPIをデフォルトで利用します。
- OpenMP 4.0のオフロード機能がサポートされました。
- OpenACC 2.0a の初期実装
- Cilk Plus を完全サポート
gcc 4.10
- 2014/04 からステージ1がはじまりました。
gcc 4.9
- 2014/04/22 にリリースされました。
- コンパイルのエラーなどをカラー表示する -fdiagnostics-color=auto のオプションが追加されました。環境変数 GCC_COLORS でも設定できます。デフォルトのカラー設定は、
です。$ export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- 並列プログラミングAPI OpenMP 4.0をサポートしました
- アクセラレータのサポートされました
- インテルが開発する並列処理の機能の Cilk Plus が部分的に実装されました。
- 簡単なプログラミング・モデルで並列プログラムを記述できます。
- 3つのキーワードで、並列プログラムが開発できます。
- C++では、C++11, C++14のサポートしました。
インストール
FreeBSDの場合
gcc 4.10
$ sudo pkg install gcc410
gcc 4.9
$ sudo pkg install gcc49
To ensure binaries built with this toolchain find appropriate versions of the necessary run-time libraries, you may want to link using -Wl,-rpath=/usr/local/lib/gcc49 For ports leveraging USE_GCC, USES=compiler, or USES=fortran this happens transparently.
gcc 4.8
$ sudo pkg install gcc48
gcc 4.7
$ sudo pkg install gcc47
gcc 4.6
$ sudo pkg install gcc46
Windows環境
CygwinやMinGWでgccが提供されます。
- https://sourceware.org/cygwin/
- http://www.mingw.org/
- http://mingw-w64.sourceforge.net/
- Windows 64bit用のMinGW/GCCが提供されます。
MinGW では、gcc 4.8.1 が使用できます。
C:\Program Files\mingw-builds\x64-4.8.1-posix-seh-rev5\mingw64\bin\gcc.exe
にインスールされています。
C:\Program Files\mingw-builds\x64-4.8.1-posix-seh-rev5\mingwbuilds.bat
を起動するとパスが通った状態で、コマンドプロントが利用できます。
C:\Program Files\mingw-builds\x64-4.8.1-posix-seh-rev5\mingw64\bin>gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=c:/program\ files/mingw-builds/x64-4.8.1-posix-seh-rev5/ming w64/bin/../libexec/gcc/x86_64-w64-mingw32/4.8.1/lto-wrapper.exe Target: x86_64-w64-mingw32 Configured with: ../../../src/gcc-4.8.1/configure --host=x86_64-w64-mingw32 --bu ild=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysr oot=/tmp/x64-481-posix-seh-r5/mingw64 --enable-shared --enable-static --disable- multilib --enable-languages=ada,c,c++,fortran,objc,obj-c++,lto --enable-libstdcx x-time=yes --enable-threads=posix --enable-libgomp --enable-lto --enable-graphit e --enable-checking=release --enable-fully-dynamic-string --enable-version-speci fic-runtime-libs --disable-isl-version-check --disable-cloog-version-check --dis able-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with -gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --wit h-system-zlib --with-gmp=/tmp/mingw-prereq/x86_64-w64-mingw32-static --with-mpfr =/tmp/mingw-prereq/x86_64-w64-mingw32-static --with-mpc=/tmp/mingw-prereq/x86_64 -w64-mingw32-static --with-isl=/tmp/mingw-prereq/x86_64-w64-mingw32-static --wit h-cloog=/tmp/mingw-prereq/x86_64-w64-mingw32-static --enable-cloog-backend=isl - -with-pkgversion='rev5, Built by MinGW-W64 project' --with-bugurl=http://sourcef orge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -I/tmp/x64-481-posix-seh-r5/libs/i nclude -I/tmp/mingw-prereq/x64-zlib/include -I/tmp/mingw-prereq/x86_64-w64-mingw 32-static/include' CXXFLAGS='-O2 -pipe -I/tmp/x64-481-posix-seh-r5/libs/include -I/tmp/mingw-prereq/x64-zlib/include -I/tmp/mingw-prereq/x86_64-w64-mingw32-stat ic/include' CPPFLAGS= LDFLAGS='-pipe -L/tmp/x64-481-posix-seh-r5/libs/lib -L/tmp /mingw-prereq/x64-zlib/lib -L/tmp/mingw-prereq/x86_64-w64-mingw32-static/lib -L/ tmp/x64-481-posix-seh-r5/mingw64/opt/lib ' Thread model: posix gcc version 4.8.1 (rev5, Built by MinGW-W64 project) C:\Program Files\mingw-builds\x64-4.8.1-posix-seh-rev5\mingw64\bin>g++ --version g++ (rev5, Built by MinGW-W64 project) 4.8.1 Copyright (C) 2013 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.
実行例
FreeBSDの場合
g++49 -std=c++11 -Wl,-rpath=/usr/local/lib/gcc49/