2009-04-05 9 views
8

Ich verwende das Windows-Treiberkit (WinDDK 6001.18001), um meine Userspace-Anwendung statt Visual Studio 2005 zu erstellen. Ich nehme diesen Ansatz, da wir auch Treiberkomponenten erstellen müssen, also würde ich lieber eine einzige Buildumgebung haben bau alles. Microsoft selbst verwendet diesen Ansatz für mehrere Produkte.Verwenden von Boost in WDK Build-Umgebung für Anwendungen?

Das funktionierte gut, bis ich begann, Boost 1.38.0 zu verwenden. Ich verwende nicht C++ in den Kernel-Modus-Komponenten, nur die Userspace-Anwendungen. In C++ - Code ist es natürlich, die Boost-Bibliotheken zu verwenden. Leider stimmt das WDK nicht zu.

Der erste Fehler bemerkte ich, ist, dass „# include <cstddef>“ nicht ptrdiff_t im std-Namespace nicht setzen, wie in Anhang D. Arbeiten, um diesen nach links erforderlich scheint mehrere Fehler in boost\lambda\detail\operator_return_type_traits.hpp über error C2976: 'std::basic_string' : too few template arguments. Es scheint redundant mit Iostream .

Hat jemand erfolgreich die Kombination von Boost, Iostream und WDK, um zusammenzuarbeiten?

Meine Quellen-Datei:

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; 
} 

Antwort

1

Interessante Frage. Die Verwendung von STL wie es war, war eine Herausforderung an sich mit dem WDK. Ich habe mich nicht weiter hinaus gewagt. Ich kann es versuchen. Denken Sie daran, dass das WDK seinen eigenen Compiler hat, der nicht mit Ihrem VS2005/VS2008-Compiler übereinstimmt (überprüfen Sie die Versionsnummern). Es ist sehr wahrscheinlich, dass es hier und da ein paar Bugs gibt.

Hinweis, dass USE_MSVCRT=1 und USE_STL=1 nicht gut Gel (zumindest für WDK 6001).

+0

Vielen Dank für Ihre Erfahrungen. Ich versuchte mit USE_LIBCMT = 1 anstelle von msvcrt, aber Probleme blieben. Angesichts der Tatsache, dass sogar STL problematisch ist, muss ich das WDK noch einmal überdenken. –

+0

Wir bauen unsere App Teil w/VS200x und den Treiber nur mit dem WDK. Beachten Sie, dass das ddkbuild-Dienstprogramm nur eine Wrapper-Batchdatei über die Befehlszeilenargumente ist (ich benutze es die ganze Zeit) und es wird wahrscheinlich nicht helfen, Compilerprobleme zu lösen. – dirkgently

+0

Ich schlug vor, ddkbuild für das Erstellen von Treibern zu verwenden und Standard vs Projekt zu verwenden, um die Anwendung zu erstellen. Sie werden eine Lösung haben, dass eines der Projekte (Treiber) mit einem benutzerdefinierten Build mit ddkbuild und einem zweiten Build (Boost) erstellt wird. – Ilya

0

Ich würde vorschlagen, anders zu gehen, d. H Compiling-Treiber von VS200.x mit this (ddkbuild) nettes Werkzeug.

Da ich selbst eine Befehlszeile Person und makefiles überall möglich, finde ich Build-Dienstprogramm nicht nützlich für komplexe Projekt.Es gibt Tonnen von Einschränkungen innerhalb MS Build-Dienstprogramm, und ich würde VS-Umgebung zum Kompilieren Ihres Projekts empfehlen.

Ich bin mir nicht sicher, ob es eine Anleitung in der ddkbuild, aber es ist einfach zu integrieren ddkbuild.bat in VS benutzerdefinierte Build-Option.

+0

Danke, ich werde wahrscheinlich diesen Weg gehen. –

+1

IMMHO, das ddkbuild ist von wenig Hilfe, wenn Sie einen Kompilierungsfehler haben. – dirkgently

+0

Ich bin nicht 100% sicher, aber ich denke, es ist möglich, Fehler und Warnungen in der VS-Protokoll anzuzeigen, aber auf die gleiche Weise wie die Verwendung von Build von der Befehlszeile müssen Sie Protokolldateien öffnen, um die Fehler zu sehen. – Ilya

1

Boost enthält möglicherweise bereits einen Workaround für Ihre Probleme, wendet diesen jedoch nicht an, da der von Ihnen verwendete Compiler nicht erkannt wird (wahrscheinlich, weil Treiber nur selten Boost verwenden).

Versuchen Sie, boost/config/select_compiler_config.hpp und boost/config/compiler/visualc.hpp zu untersuchen (und möglicherweise zu bearbeiten), um sicherzustellen, dass die Compiler-Problemumgehungen für MSVC aktiviert sind.

Verwandte Themen