Windows上でのC/C++開発環境概要¶
全般¶
商用のコンパイラとオープンソースのコンパイラが利用できます。特に最近GNU Compiler由来のコンパイラが幾種類か利用できるようになっています。
商用のコンパイラ¶
- MicrosoftのVisual Studio
- IntelのC++ Composer XE
- Embarcadero(旧Borland)のC++ Builder XE
などがあります。
Visual StudioやC++ Builderは統合開発環境(IDE)として製品化されています。
C++ Composerは並列処理が強化されたコンパイラで、統合開発環境はVisual Studioを利用する構成です。
オープンソースのコンパイラ¶
などがあります。
Mingw-w64(MinGW: Minimalist GNU for Windows)は、Windowsネイティブアプリケーション・ライブラリファイル(PE:Portable Executable 形式)を生成するためのヘッダーファイル、インポートライブラリ、ライブラリ、ツールの集合です。GCC(GNU Compiler Collection)をWindowsネイティブで実行できるように移植しています。また、LLVMのコンパイラと組み合わせることも可能です。CランタイムはMSVCRTまたはUCRTとリンク可能です。
LLVM Clangは、コンパイラ基盤のLLVMとその上で動作するC/C++コンパイラのClangの組み合わせです。LLVMのWindows版(LLVM.LLVM)は MicrosoftのVisual Studio(MSVC)ツールチェインに依存しており、Visual StudioまたはBuild Tools for Visual Studioが必要になります。もしVisual Studioツールチェインに依存させたくないならば、Martin Storsjö氏によるLLVM-MinGW.UCRTを代替として使用します。これは、Visual Studioの代替としてMingw-w64のWindows APIランタイム、C++標準ライブラリ(libc++)を使用します。
Cygwinは、Windows上でUNIX/Linux系OSのPOSIX規格のAPIの実行をエミュレーションにより実現し、UNIX/Linuxのツール群をWindows上で動作させる環境です。Cygwin上では、GCCやLLVMが利用可能です。
いずれもコマンドラインツールで、統合開発環境はVisual Studio Code, Emacs、Vim、Eclipse、NetBeansなどを使います。
ライセンスメモ¶
- Cygwin GCC
GPLv3と商用ライセンスのデュアルライセンスです。商用ライセンスはRed Hatから購入できるようです。
http://www.redhat.com/services/custom/cygwin/
CygwinのGCCでビルドしたプログラムはcygwin1.dllとリンクします。バージョン2.5.2より前は GPLv3で提供されていましたが、バージョン2.5.2以降はLGPLv3で提供されています。
- MinGW
デフォルトではmsvcrt(MicrosoftのCランタイムライブラリ)とリンクするのでMinGWでビルドしたプログラムはGPLにはなりません。
ただし、ライブラリを追加する場合、それぞれのライブラリのライセンスを確認する必要があります。- libstdc++ C++標準ライブラリです。ライセンスはGPLv3 + GCC Runtime Library Exceptionです。
- pthread POSIXスレッドライブラリです。ライセンスはLGPLv2+
- LLVM
Apache License v2.0 with LLVM Exception です。
ランタイム¶
C/C++で開発したプログラムを実行する際は、Cの標準ライブラリを提供するCランタイムライブラリと、C++の標準ライブラリを提供するC++ランタイムライブラリを使用します。
このランタイムは、C/C++コンパイラにより異なります。
コンパイラとランタイム対応¶
| ツール階層 | Visual C++ | MinGW 64 | LLVM (MSVC) | LLVM (MinGW) |
|---|---|---|---|---|
| コンパイラ | MSVC | GCC | Clang-cl | Clang |
| C++ STL | MSVC STL | libstdc++ | MSVC STL | libstdc++ or libc++ |
| C++ランタイム | VCRuntime | VCRuntime | ||
| Cランタイム | UCRT | UCRT or MSVCRT | UCRT | UCRT |
- LLVM (MSVC ABIモード)は、C++のABIがMSVC(Microsoft C++ ABI)互換となる
- LLVM (MinGW ABIモード)は、C++のABIがGCC互換(Itanium C++ ABI)となる
- UCRT : ucrtbase.dll
- MSVCRT : msvcrt.dll
- VCRuntime : vcruntime140.dll
- MSVC STL : vsvcp140.dll
- libstdc++ : GCCベース
- libc++ : LLVMネイティブ
UCRT¶
Microsoft Visual Studio 2015でこれまでのMSVCRTの後継として登場し、Windows 10からOSに標準搭載となっています。
ISO C99標準に準拠し、Cの呼び出し規約に基づくABI(Application Binary Interface)を持ちます。
UCRTの開発キットは¶
Windows SDKに、UCRTヘッダー、ライブラリ、DLLがふくま
vcruntime¶
Microsoft の Visual C++の標準ライブラリ。
詳細¶
Visual Studio¶
MinGW¶
NetBeans¶
プログラミングモデル¶
64bit¶
Windows 64bitでは、単一の静的なデータオブジェクト(例:静的領域に確保した配列)が2GBを超えることができないようです(データセクションのサイズ制限)。
2GBを超える単一データオブジェクトを扱うには、ヒープに割り当てる必要があります。