プロジェクト

全般

プロフィール

Windows上でのC/C++開発環境概要

全般

商用のコンパイラとオープンソースのコンパイラが利用できます。特に最近GNU Compiler由来のコンパイラが幾種類か利用できるようになっています。

商用のコンパイラ

などがあります。
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を超える単一データオブジェクトを扱うには、ヒープに割り当てる必要があります。


3日前に更新