在应用程序的WDK构建环境中使用boost?

时间:2009-04-05 03:48:37

标签: boost kernel driver iostream wdk

我使用Windows驱动程序工具包(WinDDK 6001.18001)来构建我的用户空间应用程序而不是Visual Studio 2005.我采用这种方法,因为我们还必须构建驱动程序组件,所以我更喜欢有一个构建环境建立一切。微软本身将这种方法用于多种产品。

这一点工作正常,直到我开始使用Boost 1.38.0。我没有在内核模式组件中使用C ++,只是用户空间应用程序。在C ++代码中,使用boost库是很自然的。不幸的是,WDK不同意。

我注意到的第一个错误是“#include< cstddef>”没有把ptrdiff_t放在std命名空间中,如附件D所要求的那样。解决这个问题,boost\lambda\detail\operator_return_type_traits.hpp中有几个错误error C2976: 'std::basic_string' : too few template arguments.它似乎与iostream多余。

有没有人成功地将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;
}

3 个答案:

答案 0 :(得分:1)

有趣的问题。使用STL本身就是WDK的挑战。我没有冒险过。我可以尝试一下。请记住,WDK拥有自己的编译器,它与VS2005 / VS2008编译器不同(请查看版本号)。这里和那里很可能有一些错误。

注意,USE_MSVCRT=1USE_STL=1不能很好地凝胶化(至少对于WDK 6001而言)。

答案 1 :(得分:1)

Boost可能已经包含了解决问题的方法,但没有应用它,因为它无法识别您正在使用的编译器(可能是因为驱动程序很少使用boost)。

尝试检查(并可能编辑)boost/config/select_compiler_config.hppboost/config/compiler/visualc.hpp,以确保启用了MSVC的编译器变通方法。

答案 2 :(得分:0)

我建议采用不同的方式,即使用this(ddkbuild)漂亮工具从VS200.x编译驱动程序。

作为一名命令行人并且随处可能使用makefile,我发现构建实用程序对于复杂项目没有用。在MS构建实用程序中有很多限制,我建议使用VS环境来编译项目。

我不确定ddkbuild中是否有howto,但是直接将ddkbuild.bat集成到VS自定义构建选项中。