2009-04-05 25 views
8

私はWindows Driver Kit(WinDDK 6001.18001)を使用してVisual Studio 2005ではなくユーザースペースアプリケーションを構築しています。ドライバコンポーネントをビルドする必要があるため、私はこのアプローチを採用しています。すべてを構築する。マイクロソフト自身もこのアプローチをいくつかの製品に使用しています。アプリケーションのWDKビルド環境でのブーストを使用しますか?

これは、Boost 1.38.0を使用するまでは問題なく動作していました。私はカーネルモードのコンポーネントでC++を使用せず、ユーザスペースアプリケーションだけを使用しています。 C++コードでは、ブーストライブラリを使用するのは当然です。残念ながら、WDKは同意しません。

私が気づいた最初のエラーは、「> cstddefの#include <」この周りの作業附属書Dによって必要と思わとして、std名前空間にptrdiff_tを入れていませんが、それはiostreamをして冗長表示されますerror C2976: 'std::basic_string' : too few template arguments.についてboost\lambda\detail\operator_return_type_traits.hppにいくつかのエラーを残したということです。

Boost、iostream、およびWDKの組み合わせが正常に動作する人は誰ですか?

私のソース・ファイル:

TARGETNAME=foobar 
TARGETTYPE=PROGRAM 

USE_MSVCRT = 1 
USE_STL = 1 
USE_ATL = 1 
ATL_VER = 30 
STL_VER = 70 
USE_NATIVE_EH = 1 
USE_IOSTREAM = 1 

SUBSYSTEM_VERSION = 5.02 

C_DEFINES = \ 
    -D_MT \ 
    -DWIN_32 \ 
    -DWIN32 \ 
    -D_WINDOWS \ 
    -DNT \ 
    -D_WIN32_DCOM \ 
    -DUNICODE \ 
    -D_UNICODE \ 
    -D_ATL_NO_DEBUG_CRT # because we are using USE_MSVCRT=1 

SOURCES=service.cpp 

INCLUDES=\ 
    $(BOOST_INC_PATH) 

TARGETLIBS=\ 
    $(SDK_LIB_PATH)\ole32.lib \ 
    $(SDK_LIB_PATH)\oleaut32.lib \ 
    $(SDK_LIB_PATH)\uuid.lib \ 

UMTYPE=console 
UMBASE=0x400000 

service.cpp:

#include <iostream> 
#include <cstddef> 

namespace std { 
     typedef ::ptrdiff_t ptrdiff_t; // DDK C++ workaround 
} 

#include <boost/lambda/lambda.hpp> 

int __cdecl main() { 
    return 0; 
} 

答えて

1

興味深い質問を。 STLをそのまま使用することは、WDK自体の課題でした。私はそれ以上に冒険していない。私はこれを試すことができます。 WDKにはVS2005/VS2008コンパイラと同じではないコンパイラがあります(バージョン番号を確認してください)。ここにはいくつかのバグがある可能性が高いです。

USE_MSVCRT=1およびUSE_STL=1は、少なくともWDK 6001ではゲル化しませんでした。

+0

あなたの経験を共有していただきありがとうございます。私はmsvcrtの代わりにUSE_LIBCMT = 1を使ってみましたが、問題は残っていました。 STLでも問題があるとすれば、WDKを再考する必要があります。 –

+0

私たちはVS200xでアプリケーションパートを構築し、WDKでのみドライバをビルドします。 ddkbuildユーティリティはコマンドライン引数(私はずっと使用しています)上の単なるラッパーバッチファイルであり、おそらくコンパイラの問題を整理するのには役に立たないことに注意してください。 – dirkgently

+0

ドライバを構築し、標準のvsプロジェクトを使ってアプリケーションをビルドするためにddkbuildを使うことを提案しました。プロジェクト(ドライバ)の1つがddkbuildを使用してカスタムビルドでビルドされ、2番目のもの(ブースト)が標準的な方法でビルドされるという解決策があります。 – Ilya

0

私は、別の方法、つまりthis(ddkbuild)という素晴らしいツールを使用してVS200.xからドライバをコンパイルすることをお勧めします。

私はコマンドラインの人であり、可能な限りmakefileを使用しているので、複雑なプロジェクトでは役に立ちません。ビルドユーティリティはMSのビルドには限界があります。

ddkbuildにハウツーがあるかどうかはわかりませんが、VSカスタムビルドオプションにddkbuild.batを統合するのは簡単です。

+0

ありがとう、おそらく私はこのルートを行くでしょう。 –

+1

IMMHO、コンパイルエラーが発生した場合、ddkbuildはほとんど役に立ちません。 – dirkgently

+0

私は100%確信していませんが、VSログにエラーと警告を表示することは可能ですが、コマンドラインからビルドを使用するのと同じ方法で、エラーを表示するためにログファイルを開く必要があります。 – Ilya

1

Boostには問題の回避策が既に含まれている可能性がありますが、使用しているコンパイラが認識されないため、適用されません。

boost/config/select_compiler_config.hppboost/config/compiler/visualc.hppを調べて、MSVCのコンパイラの回避策が有効になっていることを確認してください。

関連する問題