[ C++で開発 ]
Microsoftがコマンドライン環境だけのVisual C++を無償リリースしました。
MSDNのVisual C++ Developer Centerの以下URLから入手します。
http://msdn.microsoft.com/visualc/vctoolkit2003/
ファイル名:VCToolkitSetup.exe
サイズ:約32MB
標準C/C++の範疇でプログラムを作成する分には、一部例外[*1]を除き上記Toolkitだけで対応できますが、Win32 API等を使用したWindowsアプリケーションを作成するためには、別途Windows Platform SDKをインストールする必要があります。
上記Visual C++ Toolkit 2003のページの"Related Downloads"にある"Microsoft Windows Platform SDK"のリンクを辿るか以下のURLへ行きます。なお、ブラウザはInternet Explorerを使う必要があります。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
2005.4現在、Platform SDKには、以下の種類があります。
ここでは、1.の"Windows Server 2003 SDK"を使用します。XPだとnmake.exeなど必須コマンドが含まれていません。
種類 | ファイル名 | コンパイル スイッチ |
VC++ Toolkitには | |
---|---|---|---|---|
シングルスレッド静的リンク用 | C |
libc.lib |
/ML |
あり |
C++ |
libcp.lib |
|||
シングルスレッド静的リンク用(デバッグ版) | C |
libcd.lib |
/MLd |
あり |
C++ |
libcpd.lib |
|||
マルチスレッド静的リンク用 | C |
libcmt.lib |
/MT |
あり |
C++ |
libcpmt.lib |
|||
マルチスレッド静的リンク用(デバッグ版) | C |
libcmtd.lib |
/MTd |
あり |
C++ |
libcpmtd.lib |
|||
マルチスレッド動的リンク用インポートライブラリ | C |
msvcrt.lib (msvcr71.dll) |
/MD |
なし |
C++ |
msvcprt.lib (msvcp71.dll) |
|||
マルチスレッド動的リンク用インポートライブラリ(デバッグ版) | C |
msvcrtd.lib (msvcr71d.dll) |
/MDd |
なし |
C++ |
msvcprtd.lib (msvcp71d.dll) |
なお、msvcr71.dllおよびmsvcp71.dllは、VC++ Toolkit 2003に含まれます。msvcr71d.dllは、WINDOWS\Microsoft.NET\Framework\v1.1.4322フォルダにありましたが、msvcp71d.dllは見当たりません。
標準Cライブラリの入手方法のひとつとして、Microsoft .NET Framework SDK(無償)から取り出すことができます。
MicrosoftのWebサイトから、Microsoft .NET Framework Software Development Kitを入手し、インストールします。インストール後、以下のディレクトリに必要なライブラリファイルが置かれています。
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib msvcrt.lib msvcrtd.lib
環境変数LIBに上記ディレクトリを追加しておきます。
標準C++ライブラリは入手方法が見当たらないため、msvcp71.dllから生成することにします。以下のURLにある情報に基づいて記述しています。
http://libsh.org/win32/build.html
以下のようにコマンドを実行します。なお、sedは標準ではWindowsに入っていないので、CygwinのsedへのPATHを通しておく等をしておきます。
C:\> cd Program Files\Microsoft Visual C++ Toolkit 2003\bin C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin> echo LIBRARY msvcp71.dll > msvcprt.def C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin> echo EXPORTS >> msvcprt.def C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin> dumpbin /exports msvcp71.dll | sed -nf exports.sed >> msvcprt.def C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin> lib /def:msvcprt.def /machine:x86
/[ ]*ordinal hint/,/^[ ]*Summary/{ /^[ ]\+[0123456789]\+/{ s/^[ ]\+[0123456789]\+[ \t]\+[0123456789ABCDEFabcdef]\+[ ]\+[0123456789ABCDEFabcdef]\+[ ]\+\(.*\)/\1/p } } |
生成されたmsvcprt.libは、Program Files\Microsoft Visual C++ Toolkit 2003\lib の下にコピーします。
ここでは、インストール先ディレクトリを、D:\Program Files\Microsoft Visual C++ Toolkit 2003とします。
Windows Server 2003 SDKのSDK Coreだけ入れています。ここではインストール先ディレクトリを、D:\Program Files\Microsoft SDKとします。
コマンドライン環境なので、環境変数等をいろいろ設定する必要があります。
Visual C++ Toolkit 2003をインストールした際に、環境設定を行うバッチファイルが含まれています。
<Visual C++ Toolkit 2003インストールディレクトリ>\vcvars32.bat
コマンドプロンプト(cmd.exe)上で毎回上記のバッチファイルを実行するのは面倒なので、コマンドプロンプトのショートカットを実行時に自動的にバッチファイルを実行するように設定します。ショートカットのリンク先を以下のようにします。(D:\Program Files\Microsoft Visual C++ Toolkit 2003にVC++をインストールしていた場合)
%SystemRoot%\system32\cmd.exe /k "D:\Program Files\Microsoft Visual C++ Toolkit 2003\vcvars32.bat"
上述のvcvars32.batは、標準C/C++プログラムに必要な設定しか記述されていません。そこで、Windows Platform SDKの設定をvcvars32.batに追加します。
@echo off Set PATH=D:\Program Files\Microsoft Visual C++ Toolkit 2003\bin;%PATH% Set INCLUDE=D:\Program Files\Microsoft Visual C++ Toolkit 2003\include;%INCLUDE% Set LIB=D:\Program Files\Microsoft Visual C++ Toolkit 2003\lib;%LIB% REM add for Platform SDK set CPU=i386 set MSSdk=D:\Program Files\Microsoft SDK set LIB=%MSSdk%\Lib;%LIB% set INCLUDE=%MSSdk%\Include;%INCLUDE% set TARGETOS=WINNT set APPVER=5.0 set PATH=%MSSdk%\Bin;%MSSdk%\Bin\winnt;%PATH%;%MSSdk%Bin\Win64 REM add for .NET Framework SDK set LIB=%LIB%;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib |
clコマンドでコンパイルを行います。
E:\ex> cl /c windows_ex.c E:\home\toru\study\cxxw\opengl\ex2>cl /c wgl_window_ex1.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3052 for 80x86 Copyright (C) Microsoft Corporation 1984-2002. All rights reserved. window_ex.c E:\ex>
linkコマンドでリンクを行います。
Windowsアプリケーションをリンクする場合、user32.lib、kernel32.lib、gdi32.lib等をリンクに加えます。
E:\ex> link /OUT:windows_ex.exe windows_ex.obj user32.lib kernel32.lib gdi32.lib Microsoft (R) Incremental Linker Version 7.10.3052 Copyright (C) Microsoft Corporation. All rights reserved. E:\ex>