Kazuki IWAMOTO
iwm****@maid*****
2004年 10月 19日 (火) 05:22:41 JST
以前にも少し話が出たVisual C++ Toolkit 2003ですが、一部の改変で2.4.11.0を コンパイルできることを確認しました。 Visual C++ Toolkit 2003のインストールですが、「Visual C++ Toolkit 2003」を キーワードにして検索すれば、日本語で説明したサイトを見つけることができます。 Visual C++ Toolkit 2003自体のインストールで困ることはないと思います。 しかしVisual C++ Toolkit 2003単体ではWindowsのAPIを呼び出す アプリケーションプログラムは作成できません。Microsoft Windows Platform SDKが 必要になります。ですが、Visual C++ Toolkit 2003のインストールについて 説明しているサイトならば、Microsoft Windows Platform SDKについても 言及していると思います。 ここまでは問題ないのですが、GTK+のようなライブラリ(DLL)を作る場合、 さらに作業が必要です。GTK+ではC言語のランタイムライブラリを動的に リンクしています。実行時に動的にリンクするためにはのインポートライブラリ (msvcrt.lib)が必要なのですが、msvcrt.libはVisual C++ Toolkit 2003にも Microsoft Windows Platform SDKにも含まれていません。 実はmsvcrt.libはMicrosoft .NET Framework SDK v1.1に含まれています。 Microsoft .NET Framework SDK v1.1のインストールと設定も必要になります。 さらにこれがまた曲者で、このmsvcrt.libはmsvcrt.dllのインポートライブラリ ではなく、msvcr71.dllへのインポートライブラリです。Microsoft的には アプリケーションプログラムがmsvcrt.dllを使うのは良くないらしいです。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_c_run.2d.time_libraries.asp msvcr71.dllがmsvcrt.dll並に普及していれば問題ないのですが...。 Microsoftの説明を見る限り、これはMicrosoft .NET Framework SDK v1.1に 限ったことではなく、他の入手方法(例えば製品パッケージのVisual C++ .NET 2003) でもmsvcrt.libはmsvcr71.dllへのインポートライブラリのようです。 現状でこれを真っ当に回避するには、msvcrt.libがmsvcrt.dllの インポートライブラリになっている古い製品(例えばVisual C++ 6.0)を 使う以外には方法はなさそうです。 ここまで巧く環境を設定してもGlibのgatomic.cにあるInterlockedCompareExchange というAPIで問題が発生します。このInterlockedCompareExchangeはバイナリレベルでは 互換性が保たれていますが、ソースレベルで互換性が保たれていません。 GLibは少なくともFebruary 2003より前のSDKを前提に作られているようです。 SDKのヘッダファイルではInterlockedCompareExchangeの引数と戻り値の型が 変更されているため、コンパイル時にエラーになります。 gatomic.cを改変すればコンパイルできるようになります。 私の見解としては、 Visual C++ 6.0(コンパイラ、リンカ、nmake、C言語ランタイムライブラリ) Microsoft Windows Platform SDK February 2003(ヘッダファイル、インポートライブラリ) という組み合わせがバイナリを作る上で最良だと考えています。しかし Visual C++ Toolkit 2003(コンパイラ、リンカ) Microsoft Windows Platform SDK February 2003(ヘッダファイル、インポートライブラリ、nmake) Microsoft .NET Framework SDK v1.1(C言語ランタイムライブラリ) という組み合わせでもmsvcr71.dllにリンクされることを気にしなければ問題ないと 思います。 特に後者の組み合わせならば、すべて容易に入手可能です。 以降、問題を整理したいと思います。 岩本一樹 iwm****@maid*****