IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[DDK 3790.1830] C++: inclure <string> fait échouer la compilation


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [DDK 3790.1830] C++: inclure <string> fait échouer la compilation
    Bonjour,

    Je développe actuellement une extension de WinDbg, en C++. J'ai écrit une classe qui, entre autres, utilise des std::string et std::wstring.
    J'inclus donc <string> dans maclasse.h .

    Quand je compile, voici les amabilités que me sort le compilo (les détails de la plate-forme suivent) -> copié à la fin pour lisibilité.

    J'ai l'impression qu'il doit manquer un répertoire dans mon PATH, ou qu'il doit manquer un #define quelque part, mais je ne connais pas assez bien le DDK de windows pour ça.
    A noter qu'avant de rajouter cette classe, je n'avais que des fonctions en C, et je n'avais pas activé les switchs USE_NATIVE_EH et USE_STL. Il suffit que je retire la ligne #include <string> pour que les messages d'horreur disparaissent (mais je n'ai plus string ni wstring, sniff).

    J'aimerais bien ne pas revenir à strcmp et tout ce qui s'ensuit... Quelqu'un saurait-il m'aider par pitié ??? Merci !

    ***

    Je compile dans VS .NET 2003 avec le script ddkbuild.bat.
    Voici mon fichier "sources" (commentaires ajoutés pour lisibilité) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    // je définis la cible
    TARGETNAME=gdbstubext
    TARGETPATH=obj
    TARGETTYPE=DYNLINK
    DLLENTRY=_DllMainCRTStartup
     
    // j'étends les PATH pour inclure le SDK de WinDbg
    !if "$(DBGSDK_INC_PATH)" != ""
    INCLUDES = $(DBGSDK_INC_PATH);$(INCLUDES)
    !endif
    !if "$(DBGSDK_LIB_PATH)" == ""
    DBGSDK_LIB_PATH = $(SDK_LIB_PATH)
    !else
    DBGSDK_LIB_PATH = $(DBGSDK_LIB_PATH)\$(TARGET_DIRECTORY)
    !endif
     
    // les libs à ajouter
    TARGETLIBS=$(SDK_LIB_PATH)\kernel32.lib \
                $(SDK_LIB_PATH)\ole32.lib \
               $(DBGSDK_LIB_PATH)\dbgeng.lib \
    
    // des switch de compilation dont je ne suis pas sûr
    USE_NATIVE_EH=1
    USE_STL=1
    UMTYPE=windows
    MSC_WARNING_LEVEL = /W4
     
    SOURCES= <mes sources>

    et voici les messages d'erreur:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    d:\winddk\3790.1830\inc\crt\xlocale(394) : error C2220: warning treated as error - no object file generated
    d:\winddk\3790.1830\inc\crt\xlocale(394) : error C4511: 'std::codecvt<wchar_t,char,mbstate_t>' : copy constructor could not be generated
    d:\winddk\3790.1830\inc\crt\xlocale(394) : error C4512: 'std::codecvt<wchar_t,char,mbstate_t>' : assignment operator could not be generated
    d:\winddk\3790.1830\inc\crt\xlocale(608) : error C4511: 'std::ctype<char>' : copy constructor could not be generated
    d:\winddk\3790.1830\inc\crt\xlocale(608) : error C4512: 'std::ctype<char>' : assignment operator could not be generated
    d:\winddk\3790.1830\inc\crt\xlocale(509) : error C4511: 'std::ctype<_E>' : copy constructor could not be generated
    d:\winddk\3790.1830\inc\crt\istream(590) : error see reference to class template instantiation 'std::ctype<_E>' being compiled
    d:\winddk\3790.1830\inc\crt\xlocale(509) : error C4512: 'std::ctype<_E>' : assignment operator could not be generated

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    A priori c'est un probleme de C++, je déplace. Donne le bout de code minimal qui provoque l'erreur. Est-ce que ceci compile:
    class Maclasse
    {
    std::string s;
    };
    ?

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par vgr0880
    d:\winddk\3790.1830\inc\crt\xlocale(394) : error C4512: 'std::codecvt<wchar_t,char,mbstate_t>' : assignment operator could not be generated
    Tu tentes de copier un std::codecvt qui, comme tout les descendants de std::locale::facet, n'est pas copiable. Je doute que ça ait un rapport quelconque avec les std::string. Un exemple minimal mais complet de code montrant le problème serait le bienvenu.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Voici le bout de code minimal:

    Je compile depuis l'environnement de build "Windows Server 2003 Free" du DDK3790.1830. J'utilise la commande de build "build -cZMg".

    Dans test.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <string>
    std::string g_String;

    Dans sources:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    TARGETNAME=gdbstubext
    TARGETPATH=obj
    TARGETTYPE=DYNLINK
     
    DLLENTRY=_DllMainCRTStartup
     
    USE_MSVCRT=1
    USE_NATIVE_EH=1
     
    UMTYPE=windows
     
    MSC_WARNING_LEVEL = /W4 /WX
     
    SOURCES= test.cpp
    et j'obtiens le message d'erreur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    d:\winddk\3790.1830\inc\crt\xlocale(394) : error C2220: warning treated as error - no object file generated
    d:\winddk\3790.1830\inc\crt\xlocale(394) : error C4511: 'std::codecvt<wchar_t,char,mbstate_t>' : copy constructor could not be generated
    d:\winddk\3790.1830\inc\crt\xlocale(394) : error C4512: 'std::codecvt<wchar_t,char,mbstate_t>' : assignment operator could not be generated
    d:\winddk\3790.1830\inc\crt\xlocale(608) : error C4511: 'std::ctype<char>' : copy constructor could not be generated
    d:\winddk\3790.1830\inc\crt\xlocale(608) : error C4512: 'std::ctype<char>' : assignment operator could not be generated
    d:\winddk\3790.1830\inc\crt\xlocale(509) : error C4511: 'std::ctype<_E>' : copy constructor could not be generated
    d:\winddk\3790.1830\inc\crt\xlocale(624) : error see reference to class template instantiation 'std::ctype<_E>' being compiled
    d:\winddk\3790.1830\inc\crt\xlocale(509) : error C4512: 'std::ctype<_E>' : assignment operator could not be generated
    d:\winddk\3790.1830\inc\crt\xlocale(287) : error C4511: 'std::codecvt<_E,_To,_St>' : copy constructor could not be generated
    d:\winddk\3790.1830\inc\crt\xlocale(625) : error see reference to class template instantiation 'std::codecvt<_E,_To,_St>' being compiled
    d:\winddk\3790.1830\inc\crt\xlocale(287) : error C4512: 'std::codecvt<_E,_To,_St>' : assignment operator could not be generated
    d:\winddk\3790.1830\inc\crt\ostream(45) : error C4512: 'std::basic_ostream<_E,_Tr>::sentry' : assignment operator could not be generated
    d:\winddk\3790.1830\inc\crt\ostream(251) : error see reference to class template instantiation 'std::basic_ostream<_E,_Tr>::sentry' being compiled
    d:\winddk\3790.1830\inc\crt\ostream(298) : error see reference to class template instantiation 'std::basic_ostream<_E,_Tr>' being compiled
    d:\winddk\3790.1830\inc\crt\ostream(45) : error C4512: 'std::basic_ostream<_E,_Tr>::sentry' : assignment operator could not be generated
    d:\winddk\3790.1830\inc\crt\ostream(251) : error see reference to class template instantiation 'std::basic_ostream<_E,_Tr>::sentry' being compiled
    d:\winddk\3790.1830\inc\crt\ostream(299) : error see reference to class template instantiation 'std::basic_ostream<_E,_Tr>' being compiled

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    Si l'extension de WinDbg est une dll classique en user mode, il ne serait pas possible de la compiler normalement depuis VC++ ?
    Le DDK c'est fait pour faire des drivers, et je doute que std::string et les drivers fassent bon ménage, même si cela semble possible (flag USE_STL...)

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/09/2007, 08h59
  2. inclure la classe string
    Par didier17062006 dans le forum C++
    Réponses: 11
    Dernier message: 11/10/2006, 09h07
  3. Réponses: 1
    Dernier message: 21/09/2006, 13h20
  4. [langage] Inclure de perl en c !!!
    Par ryo00 dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2002, 10h03
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo