Windowsの無料で使える 64bit/32bit C/C++コンパイラ

Windowsで無料で使える64bit/32bit C/C++ コンパイラの環境作成について。

まとめって書いたけど基本Visual StudioとMinGW(gcc)についてしか書いてません。すまん。

Digital MARSとかBorlandとか使ってもいいけど、誰も頼る相手がいない ぼっち(俺含)開発者は 自分とInternetとGoogle先生が頼りなのでネット上に情報がある環境を選んだ方が良いかと思ってます。

開発環境

32bitのCPU/OSを対象とした開発だけなら 開発に使用するPCは

  • 32bit CPU/32bit OS
  • 64bit CPU/32bit OS
  • 64bit CPU/64bit OS

のどれでも。

ただし、開発マシンのOSとしてはWindows7/Windows8/Windows8.1のいずれかがあった方が良いでしょう。

これはVisual Studio 2013 ExpressをInstallして使うための条件になります。

参考LINK) http://www.microsoft.com/visualstudio/jpn/products/visual-studio-express-products#d-express-for-windows-desktop

mingw32を使う場合、おそらく古めのOSでも動作しますけど、開発者であれば新しい環境には早めに慣れておいた方が良いというのが私の持論(^^;

できるだけ新しいOSを使った方が良いんじゃないかなと思います。

64bit開発の場合、コンパイルだけなら32bit CPU/OSでも行けるはずですが、デバッグの問題があるので

64bit CPU/OSの環境が必要と思っておいたほうが良いでしょう。

作成したプログラムが動作する環境

これたまに誤解してる人がいるので(^_^;)。

「作成したプログラムが “どのような環境で動くか” は “作成した人” が定義すべき」です。

Win32 APIを使って、新しい機能を使わなければ古いOSでも動作するプログラムは書けますし、逆に新しい機能を使って最新のOSでしか動作しないプログラムを書く事も可能です。

# OS以外に実行時ライブラリが別途必要なプログラムを作成した場合、その実行時ライブラリがサポートしているバージョンに制約を受ける可能性はあります。

とは言いつつも、開発環境側でのRequirementも存在します。

一応、今のところVisual Studio 2013でもWindows XPまでが 対象となります。

参考LINK) http://www.microsoft.com/visualstudio/jpn/products/compatibility-2013

Visual Studio 2012までは WindowsXP or earlierだったんですけど、2013からは さすがにXP以前は対象にならなくなりました。

参考LINK) http://www.microsoft.com/visualstudio/eng/products/compatibility

32bit x86/IA32向けに作るときの開発環境

従来のPCとの互換性を大事にして32bit開発したい場合

あたりが楽ちんで良いかと。

64bit x86-64/x64/IA32e向けに作るときの開発環境

メモリー大量に使ったりLegacyなんて知らん という方。

Visual Studioは 32bitと同じですが、MinGWは MinGW-w64を使う事になるかと。

Visual Studioを使う

Visual Studioのサイトからダウンロードして普通にインストールすれば豪華な統合開発環境が使えますので、そのままお使いください。

ただ、中にはIDEなんていらないという人もいるかと思います(俺含)。

以前は Windows SDKを Installするとコマンドライン環境が入手できたのですが、現在ではSDKからCompilerは分離されたため、Visual Studioが必須になっていたはずです。入れましょう。

Visual Studio入れたけど普段のBuildは やっぱりコマンドラインからやりたい。

という場合、開発者コマンドプロンプトをクリックして開いても良いですが、以下のバッチファイルをたたけば環境変数の類を設定してくれるので楽ちんです。

32bitのプログラムを作りたい場合

開発環境が32bit OSの場合

C:\Program Files\Microsoft Visual Studio 12.0\VC\vcvarsall.bat

開発環境が64bit OSの場合

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat

64bitのプログラムを作りたい場合

開発環境が32bit OSの場合

C:\Program Files\Microsoft Visual Studio 12.0\VC\vcvarsall.bat x86_amd64

開発環境が64bit OSの場合

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat amd64

※ 注意)64bit Compilerは Visual Studio Expressには入っていないかもしれません(2012は入ってなかった)。

この場合、64bit OSを使っていてもx86_amd64を指定します。

参考LINK) http://msdn.microsoft.com/en-us/library/vstudio/x4d2c09s.aspx

MinGW/gcc 32bit向けの作成環境

2013/10現在 mingw32のデフォルト include検索パスには問題があるのでgccを実行したときにエラーが出る人は こちらの記事参照

MinGWのサイトからダウンロードして普通にインストールすれば使えます。

インストーラのダウンロードは下図の赤で囲った[Download Installer]ボタンです。

実行すると Installation Managerのインストール場所(デフォルトはC:\MinGW) と、GUIの有無、GUIを入れる場合はショートカットの作成先を聞かれます。

なお、インストールパスですが変なパスにインストールして苦しむよりはデフォルトでやっちゃう方がましだと思います。

インストールが完了するとInstallation Managerが起動します(GUIを入れてた場合だけか)。

とりあえず最小限としてBasic Setupの中にある mingw32-baseと mingw-gcc-g++をMark。

最後にメニューのInstallation→Apply Changesすると確認画面が出てApplyを押せばインストール開始です。

インストールが終わったらコマンドライン開いてC:\MinGW\binにPATHを通してgccって打って実行できるか調べましょう。

ところでMSYSってのもあるんだけど、なにこれ?って人もいるかと思います。

MSYSはUNIX Likeな環境をWindowsで実現するソフトウェアで 作ったソースをgcc/g++でコンパイルするだけなら不要です。

世の中にいっぱいあるLibraryをコンパイルして使いたい場合はあると便利です。Cygwinほど変態的(失礼^^;)ではないので 良いのではないかと。

MinGW/gcc 64bit編

2014/8現在 mingw-w64/mingw-builds/64bit/gcc4.9.1で gccを実行したときにD:にディスクが無いってエラーが出る人は こちらの記事参照

http://mingw-w64.sourceforge.net/download.php#mingw-buildsからダウンロードして

それを解凍してMinGW64\binにPATHを通せばOK。

なのですが、ちょっと64bit環境は分かりにくいところがあるので説明。選択しが4つほどあります。

まず、Threadの処理について選択する必要があります。

 ・UNIX系(というかPOSIX)のThread Libraryである POSIX Thread

 ・Win32 APIの定める Win32 Thread

どっちでもいいです。私はPOSIXなソースをコンパイルする事が稀なのでWin32です。

続いて例外処理の選択

 ・SEH-構造化例外ハンドラ。Windows Nativeの例外処理機構。Overheadが小さい。GPの捕捉ができる。

 ・SJLJ-昔ながらのSetJump/LongJumpにより例外処理機構。Overheadが大きい

の二択です。

私はSEHを選択。

この条件であればダウンロードするときは、

http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/

ここから、4.8.2→threads-win32→sehと選択して出てくるファイルをダウンロードします。

ダウンロードできたファイルを解凍するとmingw64というフォルダができます。

mingw64\binにpathを通せば完了。

MinGW32やmsysと混ぜない方がすっきりして個人的には好きなので排他的に(普段はPathを設定せずに)利用しています。

よほど大きなメモリーを扱わない限り、32bitの方がPortableで使いやすいので あまり使ってないというのもあるのですけど。

こんなもんかな。