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 :

[Compilation] Pb de compilation pour une nulle


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut [Compilation] Pb de compilation pour une nulle
    1 - Connaissez vous un site qui explique à fond les principes fondamentaux de la compilation ?
    -> différence entre compilation C et C++
    -> les différents compilateurs sous UNIX ...

    2 - j'ai un pb de compilation (qui l'eu cru ), qui est le suivant :

    gcc: -lxml2: linker input file unused because linking not done
    gcc: -lz: linker input file unused because linking not done
    gcc: -lpthread: linker input file unused because linking not done
    gcc: -liconv: linker input file unused because linking not done
    gcc: -lm: linker input file unused because linking not done
    gcc: -lsocket: linker input file unused because linking not done
    gcc: -lnsl: linker input file unused because linking not done


    Ma ligne de commande pour la compilation :
    gcc `xml2-config --cflags --libs` -I/usr/local/include/libxml2/ -Wpointer-arith -fwritable-strings -O2 -c WorkOnXml.c -o WorkOnXml.o

    Mes headers (je crois que c'est comme cela qu'on les appelle) :
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <libxml/tree.h>
    #include <libxml/xpath.h>


    Merci d'avance pour votre aide

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    j'ai trouvé, il me manquait ma fonction main

    Ceci dit, un site sur les compilateurs et makefile, ça m'interesse toujours

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Sur ta ligne de compilation, tu as 2 fois le -l/usr/local/include/libxml2/, le premier étant dans le xml2-config --libs.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    Ok, corrigé, merci

    Actuellement, j'ai :
    - struct.h (ensemble de structures)
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>

    struct tSource{
    char * type;
    };

    struct tTransmission{
    struct tSource source;
    };


    - WorkOnXml.c (ensemble de fonctions utilisant libXMl2 et retournant des variables de type structures (j'inclue donc mes structures avec un #include "struc.h"

    - hosaflow.c qui fait appel aux fonctions écrites dans WorkOnXml.c . Il utilise par conséquent mon struc.h.

    J'aimerai compiler WorkOnXml.c de façon à avoir un WorkOnXml.o (pour avoir une espèce de librairie), puis compiler hosaflow qui utiliserait mon
    WorkOnXml.o. Est-ce possible ?

    Mon makefile ressemble pour l'instant à cela :
    CFLAGS_XML = `xml2-config --cflags --libs`
    CFLAGS = -W -Wtraditional -Wpointer-arith -fwritable-strings -O2
    CC = gcc

    TARGETS = hosaflow WorkOnXml.o
    all: ${TARGETS}

    hosaflow: WorkOnXml.o hosaflow.c struct.h
    @echo "***************** Compilation de HosaFlow ************************"
    ${CC} ${CFLAGS} WorkOnXml.o hosaflow.c -o hosaflow

    WorkOnXml.o: WorkOnXml.c
    @echo "***************** Compilation de scandir.o **********************"
    ${CC} ${CFLAGS_XML} ${CFLAGS_XML} -o WorkOnXml.o WorkOnXml.c


    Lorsque je compile hosaflow, il me retourne le message suivant :
    gcc -W -Wtraditional -Wpointer-arith -fwritable-strings -O2 WorkOnXml.o hosaflow.c -o hosaflow
    hosaflow.c: In function `main':
    hosaflow.c:23: warning: traditional C rejects ISO C style function definitions
    ld: fatal: file WorkOnXml.o: unknown file type
    ld: fatal: File processing errors. No output written to hosaflow
    collect2: ld returned 1 exit status
    make: *** [hosaflow] Error 1

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    A noter que dans mon hosaflow.c , j'ai la déclaration du prototype d'une des fonctions présentes dans le WorkOnXml.c

    extern struct tTransmission GetTransmission(char *id);

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Pour ta structure n°2, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct tTransmission{
    tSource source;
    };
    Le struct pour la variable n'est plus à mettre

    Ensuite, pour la ligne du GCC, c'est quoi "hosaflow" ? Ton futur programme ? Normalement, c'est aussi un .o, ensuite tu fais une édition des liens avec le tout, mais à la fin.
    Ensuite, c'est pas GCC qu'il faut appeler, mais G++.
    Pour l'erreur, on ne peut rien savoir, on a pas hosaflow.c, ou la ligne fautive !

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par kendras
    A noter que dans mon hosaflow.c , j'ai la déclaration du prototype d'une des fonctions présentes dans le WorkOnXml.c

    extern struct tTransmission GetTransmission(char *id);
    En C++, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tTransmission GetTransmission(char *id);

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    Histoire de donner le context, je développe un mini EAI en C++ sous Unix.
    Le principe est assez simple :
    -> chargement d'un fichier de configuration en XML, qui contient une liste de file WMQ à dupliquer vers d'autres files WMQ (j'ajouterai plus tard un module de duplication de fichier en fileSystem et en FTP)
    -> duplication des files

    Le nom de ce programme est hosaflow
    La base se présente ainsi :

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>

    #include "const.h"
    #include "WorkOnXml.h"


    static char *global_cfgfile;

    tTransmission GetTransmission(char *id);

    int main(int argc, char **argv)
    {
    int ID;
    tTransmission transmission;
    transmission = GetTransmission(argv[1]);

    }
    Maintenant, j'essaye d'avoir un programme le plus clair possible, avec mes structures dans un fichier, mes fonctions dans d'autres fichiers... etc et etc.

    La compilation de l'ensemble m'est pour l'instant inaccesible...
    Pourquoi g++ plutot que gcc ?

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Parce que tu es dans la section C++ et pas C
    Pour juste compiler, c'est g++ -c le_fichier les_options
    Ensuite pour l'édition des liens, c'est g++ -o les_fichiers_objets les_options_bibliotheques

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    lol, bon OK
    passons en c++ ... Je ne vais pas faire ma difficile

    J'ai fait un grand ménage de printemps pour utiliser le g++

    On va dire que ça compile presque, à ceci pres qu'il me dit :
    WorkOnXml.h:52: error: invalid conversion from `char*' to `const xmlChar*'

    La ligne en question est :
    xpathObj = xmlXPathEvalExpression(XPathExp, xpathCtx);
    XPathExp a été déclaré ainsi :
    char *XPathExp;
    XPathExp = "//trans[@id=";
    strcat(XPathExp, id);
    strcat(XPathExp, "]/get");
    Ok, du Char, ce n'est pas pareil que du xmlChar, mais comment faire la conversion ?
    Tout ceci est bien laborieux, y verrais-je un jour la fin

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    C'est quoi xmlChar ?

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    d'après la doc de libxml2 :
    Typedef unsigned char xmlChar

  13. #13
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Alors utilise directement des unsigned char, pour voir.

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    J'ai fini par faire cela :

    xpathObj = xmlXPathEvalExpression((xmlChar *)XPathExp, xpathCtx);
    Merci pour ton aide

  15. #15
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Attention, car un unsigned char n'est pas un char.
    De plus, tu devrais mettre un static_cast<xmlChar*> plutôt qu'un cast C qui ne sont plus d'actualité.

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    Le pb, c'est que si j'utilise unsigned char... j'ai un problème avec ma concaténation de chaîne...

    unsigned char *XPathExp;
    XPathExp = "//trans[@id=";
    strcat(XPathExp, id);
    strcat(XPathExp, "]/get");
    (c'est barbar sans doute comme syntaxe...)

    Ma compilation me dit clairement :

    WorkOnXml.h:26: error: invalid conversion from `char*' to `unsigned char*'
    WorkOnXml.h:27: error: invalid conversion from `unsigned char*' to `char*'
    WorkOnXml.h:28: error: invalid conversion from `unsigned char*' to `char*'
    WorkOnXml.h:32: error: invalid conversion from `unsigned char*' to `const char*

  17. #17
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    A ce moment, prend un vrai cast C++ et pas un cast C

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    Ok, partons sur la base d'un cast nouvelle génération

    La syntaxe, ça donnerait quoi ?

    A priori, ça, il n'aime pas...

    xpathObj = xmlXPathEvalExpression(static_cast<xmlChar*>XPathExp, xpathCtx);

  19. #19
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Tu as jeté un oeil à la FAQ C++ ? http://c.developpez.com/faq/cpp/?page=conversions

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    Ok, merci, je viens d'y jeter deux yeux.

    ça me donnerait ça (en plus, la compilation ne rale pas) :
    xpathObj = xmlXPathEvalExpression(reinterpret_cast<xmlChar*>(XPathExp), xpathCtx);
    Désolée pour les questions qui peuvent paraître bêtes, mais je suis newbie dans ce monde C sous unix...
    Ma langue courante et le C# sous windows...

    Je crainds les pertes de données et les fuites mémoires...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/08/2013, 14h36
  2. BDD pour une nulle
    Par pepsibou dans le forum Débuter
    Réponses: 1
    Dernier message: 18/01/2009, 18h36
  3. Problème de compilation pour une DLL
    Par Faith's Fall dans le forum C++Builder
    Réponses: 8
    Dernier message: 24/03/2008, 15h40
  4. Réponses: 2
    Dernier message: 12/12/2006, 22h25
  5. [Compilation] A quel moment pour une application ?
    Par Rick1602 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/03/2004, 20h36

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