none
problème de la compilation de libraraie Libxml2 RRS feed

  • Question

  • Salut,

    - j' extrais tous les sept archives libxml2-2.7.3.win32, iconv-1.9.2.win32, zlib-1.2.3.win32, libxmlsec-1.2.11+.win32, libxslt-1.1.24.win32, xsldbg-3.1.7.win32 et openssl-0.9.8a.win32.

    - je mis les trois répertoires include , bin et lib de chacun de  sept archives sous les tris répertoires suivants include , bin et lib de Visual Stusio 2008

    C:\Program Files\Microsoft Visual Studio 9.0\VC\include\libxml
    C:\Program Files\Microsoft Visual Studio 9.0\VC\bin
    C:\Program Files\Microsoft Visual Studio 9.0\VC\lib

    - j'ajoute dans le PATH de variable système:
    C:\Program Files\Microsoft Visual Studio 9.0\VC\bin

    - j'écris dans mon programme C un  simple exemple donné dans le  site de LIBXML2 :

    #include <stdio.h>
    #include <stdlib.h>
    #include <libxml/parser.h>
     
    int main() {
        xmlDocPtr doc;
        xmlNodePtr racine;

        // Ouverture du fichier XML
        doc = xmlParseFile("catalogue.xml");
        if (doc == NULL) {
            fprintf(stderr, "Document XML invalide\n");
            return EXIT_FAILURE;
        }
        // Récupération de la racine
        racine = xmlDocGetRootElement(doc);
        if (racine == NULL) {
            fprintf(stderr, "Document XML vierge\n");
            xmlFreeDoc(doc);
            return EXIT_FAILURE;
        }
        printf("La racine du document est : %s\n", racine->name);
        // Libération de la mémoire
        xmlFreeDoc(doc);

        return EXIT_SUCCESS;
    }

    Après la compilation, j'ai les messages d'erreurs suivants:

    1>------ Début de la génération : Projet : passage, Configuration : Debug Win32 ------
    1>Édition des liens en cours...
    1>main.obj : error LNK2019: symbole externe non résolu _xmlFreeDoc référencé dans la fonction _main
    1>main.obj : error LNK2019: symbole externe non résolu _xmlDocGetRootElement référencé dans la fonction _main
    1>main.obj : error LNK2019: symbole externe non résolu _xmlParseFile référencé dans la fonction _main
    1>C:\ChGaLib\passage\Debug\passage.exe : fatal error LNK1120: 3 externes non résolus
    1>Le journal de génération a été enregistré à l'emplacement "file://c:\ChGaLib\passage\passage\Debug\BuildLog.htm"
    1>passage - 4 erreur(s), 0 avertissement(s)
    ========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========


    SVP, j'ai besoin du vos aides.
    samedi 27 juin 2009 07:38

Réponses

  • Vous avez fait le plus rébarbatif, reste le plus simple.
    Il faut indiquer dans ton projet que tu utilises la lib (le fichier en .lib)
    Dans les propriétés du projet : "Configuration Properties"->"Linker"->"Ouput"
    Dans le Panel de Gauche, ligne "Additional dependencies", il faut y indiquer le nom de toutes les librairies additionnelles.
    Paul Bacelar, Ex - MVP VC++
    samedi 11 juillet 2009 18:09
    Modérateur
  • Contrairement à chabnasri, vous avez un problème de compilation, pas d'édition de line.

    C'est l"inclusion d'un fichier d'en-tête (.h) qui vous fait défaut.

    Vérifiez dans les .h fournis dans les librairies utilisées, lesquelles définissent 'xmlDocPtr', 'xmlNodePtr', 'xmlParseFile', 'xmlDocGetRoot' et 'xmlFreeDoc'.

    Vous n'avez ensuite qu'à ajouter leur inclusion (via #include ...) au début du fichier DOM.cpp.


    Paul Bacelar, Ex - MVP VC++
    jeudi 28 octobre 2010 00:50
    Modérateur
  • Procédons par ordre.

    Pour l'erreur LNK1120, il ne faut pas commencer à mettre tout et surtout n'importe quoi dans les librairies que vous incluez. Vous risquez d'inclure des lib incompatibles entre elles ou qui se marchent dessus.

    Utilisez l'option du linker /VERBOSE:LIB (http://msdn.microsoft.com/en-us/library/wdsk6as6(v=VS.100).aspx) pour voir les librairies vraiment utilisées et pourquoi.

     

    Pour l'erreur LNK1104, MSDN (http://msdn.microsoft.com/en-us/library/ts7eyw4s(VS.71).aspx) livre un nombre assez conséquent de causes qu'il serait bon de vérifier.


    Paul Bacelar, Ex - MVP VC++

    vendredi 29 octobre 2010 00:32
    Modérateur

Toutes les réponses

  • Vous avez fait le plus rébarbatif, reste le plus simple.
    Il faut indiquer dans ton projet que tu utilises la lib (le fichier en .lib)
    Dans les propriétés du projet : "Configuration Properties"->"Linker"->"Ouput"
    Dans le Panel de Gauche, ligne "Additional dependencies", il faut y indiquer le nom de toutes les librairies additionnelles.
    Paul Bacelar, Ex - MVP VC++
    samedi 11 juillet 2009 18:09
    Modérateur
  • Désolé de resortir ce view topic mais j'ai suivis exactement la même démarche que chabnasri mais je n'ai pas de bons résultats.

    J'ai mis les lib, bin, include dans les bon fichier mais j'utilise Visual Studio 6.

    J'ai mis une a une les librairies suivante:

    C:\WINNT\system\iocanbox.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libxml2.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\zlib.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\zdll.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\ssleay32_a.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\ssleay32.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libeay32.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libeay32_a.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libxslt.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libxslt_a.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libexslt.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libexslt_a.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libxmlsec_a.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libxmlsec.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\llibxmlsec-openssl_a.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\llibxmlsec-openssl.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libxmlsec-mscrypto_a.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libxmlsec-mscrypto.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libxml2_a_dll.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\libxml2_a.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\iconv.lib

    C:\Program Files\Microsoft Visual Studio\VC98\Lib\iconv_a.lib

    Mais le proramme m'indique les erreurs suivantes:

    --------------------Configuration: Recuperation_Calculateurs - Win32 Debug--------------------
    Compiling...
    DOM.cpp
    C:\Documents and Settings\athanas\Mes documents\_Projet_1_Realisation_d_outils_de_parametrage_et_de_calibration\04 - Mixte ClaasBus et J1939\Recuperation_Calculateurs-V3\Programme\DOM.cpp(9) : error C2065: 'xmlDocPtr' : u
    ndeclared identifier
    C:\Documents and Settings\athanas\Mes documents\_Projet_1_Realisation_d_outils_de_parametrage_et_de_calibration\04 - Mixte ClaasBus et J1939\Recuperation_Calculateurs-V3\Programme\DOM.cpp(9) : error C2146: syntax error : 
    missing ';' before identifier 'doc'
    C:\Documents and Settings\athanas\Mes documents\_Projet_1_Realisation_d_outils_de_parametrage_et_de_calibration\04 - Mixte ClaasBus et J1939\Recuperation_Calculateurs-V3\Programme\DOM.cpp(9) : error C2065: 'doc' : undecla
    red identifier
    C:\Documents and Settings\athanas\Mes documents\_Projet_1_Realisation_d_outils_de_parametrage_et_de_calibration\04 - Mixte ClaasBus et J1939\Recuperation_Calculateurs-V3\Programme\DOM.cpp(10) : error C2065: 'xmlNodePtr' :
     undeclared identifier
    C:\Documents and Settings\athanas\Mes documents\_Projet_1_Realisation_d_outils_de_parametrage_et_de_calibration\04 - Mixte ClaasBus et J1939\Recuperation_Calculateurs-V3\Programme\DOM.cpp(10) : error C2146: syntax error :
     missing ';' before identifier 'racine'
    C:\Documents and Settings\athanas\Mes documents\_Projet_1_Realisation_d_outils_de_parametrage_et_de_calibration\04 - Mixte ClaasBus et J1939\Recuperation_Calculateurs-V3\Programme\DOM.cpp(10) : error C2065: 'racine' : und
    eclared identifier
    C:\Documents and Settings\athanas\Mes documents\_Projet_1_Realisation_d_outils_de_parametrage_et_de_calibration\04 - Mixte ClaasBus et J1939\Recuperation_Calculateurs-V3\Programme\DOM.cpp(13) : error C2065: 'xmlParseFile'
     : undeclared identifier
    C:\Documents and Settings\athanas\Mes documents\_Projet_1_Realisation_d_outils_de_parametrage_et_de_calibration\04 - Mixte ClaasBus et J1939\Recuperation_Calculateurs-V3\Programme\DOM.cpp(20) : error C2065: 'xmlDocGetRoot
    Element' : undeclared identifier
    C:\Documents and Settings\athanas\Mes documents\_Projet_1_Realisation_d_outils_de_parametrage_et_de_calibration\04 - Mixte ClaasBus et J1939\Recuperation_Calculateurs-V3\Programme\DOM.cpp(24) : error C2065: 'xmlFreeDoc' :
     undeclared identifier
    C:\Documents and Settings\athanas\Mes documents\_Projet_1_Realisation_d_outils_de_parametrage_et_de_calibration\04 - Mixte ClaasBus et J1939\Recuperation_Calculateurs-V3\Programme\DOM.cpp(27) : error C2227: left of '->nam
    e' must point to class/struct/union
    Error executing cl.exe.
    mardi 26 octobre 2010 15:03
  • Contrairement à chabnasri, vous avez un problème de compilation, pas d'édition de line.

    C'est l"inclusion d'un fichier d'en-tête (.h) qui vous fait défaut.

    Vérifiez dans les .h fournis dans les librairies utilisées, lesquelles définissent 'xmlDocPtr', 'xmlNodePtr', 'xmlParseFile', 'xmlDocGetRoot' et 'xmlFreeDoc'.

    Vous n'avez ensuite qu'à ajouter leur inclusion (via #include ...) au début du fichier DOM.cpp.


    Paul Bacelar, Ex - MVP VC++
    jeudi 28 octobre 2010 00:50
    Modérateur
  • Merci pourcette réponse rapide.

    Maintenant j'ai le même problème.

    --------------------Configuration: Recuperation_Calculateurs - Win32 Debug--------------------
    Linking...
      Creating library Debug/Recuperation_Calculateurs.lib and object Debug/Recuperation_Calculateurs.exp
    DOM.obj : error LNK2001: unresolved external symbol _xmlFreeDoc
    DOM.obj : error LNK2001: unresolved external symbol _xmlDocGetRootElement
    DOM.obj : error LNK2001: unresolved external symbol _xmlParseFile
    Debug/Recuperation_Calculateurs.exe : fatal error LNK1120: 3 unresolved externals
    Error executing link.exe.
    Recuperation_Calculateurs.exe - 4 error(s), 0 warning(s)

    J'ai essayer demettre les librairie dans: clique droit projet/setting/link/object library module/

    Je met les librairies sapécifié dans mon post précédent mais il medonne une erreur:

    --------------------Configuration: Recuperation_Calculateurs - Win32 Debug--------------------
    Linking...
    LINK : fatal error LNK1104: cannot open file "C:\Program.obj"
    Error executing link.exe.

    J'avoue que je ne comprend pas vraiment...

    Désolé pour les questions mais je suis nouvelle et perdus.

    jeudi 28 octobre 2010 05:41
  • Procédons par ordre.

    Pour l'erreur LNK1120, il ne faut pas commencer à mettre tout et surtout n'importe quoi dans les librairies que vous incluez. Vous risquez d'inclure des lib incompatibles entre elles ou qui se marchent dessus.

    Utilisez l'option du linker /VERBOSE:LIB (http://msdn.microsoft.com/en-us/library/wdsk6as6(v=VS.100).aspx) pour voir les librairies vraiment utilisées et pourquoi.

     

    Pour l'erreur LNK1104, MSDN (http://msdn.microsoft.com/en-us/library/ts7eyw4s(VS.71).aspx) livre un nombre assez conséquent de causes qu'il serait bon de vérifier.


    Paul Bacelar, Ex - MVP VC++

    vendredi 29 octobre 2010 00:32
    Modérateur