torutkのブログ

ソフトウェア・エンジニアのブログ

Windows上のNetBeans 8.0 RC1でC++開発を整える

Linuxであれば簡単なのですが、Windows上でNetBeansC++開発環境を構築するのは少々複雑でした。

NetBeansGNUコンパイラ系を使用するので、Windows上ではまずGNUコンパイラを整えるところから始まります。GNUコンパイラUNIX系のツールなので、Windowsへは移植という形でいくつか存在します。著名なところではCygwinMinGWでしょうか。

NetBeansCygwinを認識するみたいなのでCygwinであれば設定が簡単です。しかし、CygwinGCCで作成したプログラムはcygwin1.dllを必ずリンクします。cygwin1.dllのライセンスは商用ライセンスとGPLのデュアルライセンスなので、Red Hat社から商用ライセンスを購入しない場合はGPLが適用され、CygwinGCCで作成したプログラムはGPL派生物に該当します。MinGWGCCで作成したプログラムはmsvcrt(マイクロソフトのランタイムライブラリ)とリンクするので、それだけではGPL派生物には該当しません。

そこで、仕事で使う用途ではMinGWを選択することが多いと思われます。しかしながら、NetBeansMinGWを使う設定は一筋縄ではいかなかったので、次のページに構築の経緯を記載しました。
http://www.torutk.com/projects/swe/wiki/Windows_NetBeans_C++%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83

なお、Windows 7 64bit版、Cygwin 64bit版、MinGW64での構築です。

NetBeansからmakeを呼び出すときに、MinGWを使う設定であってもCygwinのシェル環境が使われているように見えるので、Cygwinを入れていないマシンでMinGWを使うときは、また別な設定、振る舞いをするのかと思います。

Windows 7 64bit版にMinGW64を入れる手順は次のページに記載しました。
Windows MinGW開発環境 - ソフトウェアエンジニアリング - Torutk

64bitプログラムのメモリーモデル

AMD64プロセッサとその互換プロセッサ*1での64bitプログラムには、OSによってメモリにいくつか制約があります。

Linuxでは、メモリーモデルにsmall, medium, largeがあります*2GCCでビルドしたプログラムはデフォルトはsmallモデルとなります。

AMD64Linux 64bit OS上での64bitプログラムのメモリモデルと制約

メモリモデル コードサイズ データサイズ(静的) 備考
small 2GBまで 2GBまで デフォルト
medium 2GBまで なし
large なし なし

コードとデータのサイズの制約は、単一オブジェクトで2GBという記述と、合計で2GBという記述とがあり、どちらが正しいのかは要調査です。コードとデータのアクセスに相対アドレス指定を使うらしいので、その場合はそれぞれ合計での値になりそうですが。

Windowsでは、メモリモデルの選択はできず、静的データサイズの上限は2GBとなるようです。

*1:IntelXeonやCore

*2:まるでIntel 16bit CPU時代のCコンパイラを彷彿とさせます