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 .h introuvable


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut Compilation .h introuvable
    Bonjour à tous
    J'ai un problème avec mon programme.
    Lors de la compilation, mes 3 fichiers .h ne sont pas trouvés.

    L'arborescence est la suivante :
    -pcms_api
    --ocilib.h
    --pcmi_api.h
    --premium
    ---common
    ----include
    ------pcms_event.h
    ---events
    ----autorisationBrancheProduit
    -----user_supplied.c
    -----makefile

    donc dans mon fichier user_supplied.c j'ai bien inclus les 3 fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include "pcms_api.h"
    #include "pcms_event.h"
     
    #include "ocilib.h"
    Mon makefile est le 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
    19
     
     
    CC=gcc
    CFLAGS=-W -Wall -ansi -pedantic
    EXEC=user_supplied
     
    all: $(EXEC)
     
    user_supplied: user_supplied.o
    	$(CC) -o user_supplied user_supplied.o
     
    user_supplied.o: user_supplied.c
    	$(CC) -o user_supplied.o -c user_supplied.c $(CFLAGS)
     
    clean:
    	rm -rf *.o
     
    cleanall: clean
    	rm -rf $(EXEC)
    Qu'est-ce qui ne marche pas la dedans?!

    Merci d'avance pour votre aide

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    ben, les réportoires ./pcms_api et ./pcms_api/premium/common/include ne sont pas coonus du compilo (pas de declaration -Ixxxx) et je penses pas qu'ils soient inclus dans les sys includes...

    Faut donc juste les inclure dans ton makefile
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    ton .h n'est pas au même niveau que ton .c : le compilateur ne peut pas le trouver dans le répertoire courant (je suppose que tu es au même niveau que ton makefile) ou dans les repertoires d'include par défaut du compilo.

    A vue de nez, il suffit de corriger les #include "XX.h" se comporte par #include "../../XX.h"

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    tu peux ajouter comme ca... Mais c'est pas tres propre ....
    Mais il vaut mieux que les chemins soient dans le makefile que dans les declarations d'include...

    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
     
    CC=gcc
    CFLAGS=-W -Wall -ansi -pedantic
    EXEC=user_supplied
    INCS= -I$../../../../pcms_api -I../../../common/include
     
    all: $(EXEC)
     
    user_supplied: user_supplied.o
        $(CC) -o user_supplied user_supplied.o
     
    user_supplied.o: user_supplied.c
        $(CC) $(INCS) $(CFLAGS) -o user_supplied.o -c user_supplied.c 
     
    clean:
        rm -rf *.o
     
    cleanall: clean
        rm -rf $(EXEC)
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  5. #5
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    Citation Envoyé par Vincent Rogier Voir le message
    tu peux ajouter comme ca... Mais c'est pas tres propre ....
    Mais il vaut mieux que les chemins soient dans le makefile que dans les declarations d'include...

    [code]
    CC=gcc
    CFLAGS=-W -Wall -ansi -pedantic
    EXEC=user_supplied
    INCS= -I$../../../../pcms_api -I../../../common/include
    ...
    C'est ce que je ferais pour une grosse API genre libxml2.

    Pour un petit header à moi, j'utiliserais un include relatif.
    Ca me semble plus lisible et permet d'un seul coup d'oeil dans le source de faire le lien...

  6. #6
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    Merci beaucoup pour vos réponses aussi rapides
    J'ai donc changé mon makefile en ceci :
    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
     
     
    CC=gcc
    CFLAGS=-W -Wall -ansi -pedantic
    EXEC=user_supplied
    INCS= -I$../../../.. -I$../../../common/include
     
    all: $(EXEC)
     
    user_supplied: user_supplied.o
    	$(CC) -o user_supplied user_supplied.o
     
    user_supplied.o: user_supplied.c
    	$(CC) $(INCS) $(CFLAGS) -o user_supplied.o -c user_supplied.c 
     
    clean:
    	rm -rf *.o
     
    cleanall: clean
    	rm -rf $(EXEC)
    Ca a l'air de fonctionner mais le fichier pcms_api.h fournit par le client a l'air buggué! :p

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par michel.di Voir le message
    Ca a l'air de fonctionner mais le fichier pcms_api.h fournit par le client a l'air buggué! :p
    Sans doute l'ordre des include, ou un define qui manque quelque part (dans les flags de compils sans doute..)).

    Mais il faudrait en savoir plus sur ce qui a "l'air buggé"...

  8. #8
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par Grulim Voir le message
    C'est ce que je ferais pour une grosse API genre libxml2.

    Pour un petit header à moi, j'utiliserais un include relatif.
    Ca me semble plus lisible et permet d'un seul coup d'oeil dans le source de faire le lien...
    sauf que :

    -si ton fichier change de place
    - ou que l'arborscence change
    - ou que tu souhaite réutiliser ton header dans un autre projet

    ben ta solution n'est pas viable.

    Cela n'a rien a voir avec l'importance du projet...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  9. #9
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    le bug concernant l'api du client était un problème de commentaires. Il les mettait en // au lieu de /* */

    Par contre j'ai un autre problème :
    j'ai deux variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char id_produit[128];
    char id_version[512];
    et je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    id_produit = ptrObj->productId;
    id_version = ptrObj->revision;
    la structure étant la suivante :
    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
     
    typedef struct
    {
    int uid;
    int objType;/* PCMS_ITEM or PCMS_PART */
    /*or PCMS_CHDOC etc*/
    int typeUid;
    char typeName[PCMS_L_TYPE_NAME + 1];
    char productId[PCMS_L_PRODUCT_ID + 1];
    char objId[PCMS_L_CD_ID + 1];
    char variant[PCMS_L_VARIANT + 1];
    char revision[PCMS_L_REVISION + 1];
    char description[PCMS_L_DESCRIPTION + 1];
    char userName[PCMS_L_USER + 1];
    char status[PCMS_L_STATUS + 1];
    char dateTime[PCMS_L_DATE_TIME + 1];
    char isExtracted;/* 'Y' = Yes, 'N' = No */
    int noAttrs;/* The number of pcms_defined */
    /* attributes for this object */
    PcmsObjAttrStruct *attrs;
    /* Pointer to the array of pcms_defined */
    /*attributes*/
    } PcmsObjStruct;
    et le problème a la compilation est que les types ne sont pas compatibles!

    merci pour votre aide

  10. #10
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    alors ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  11. #11
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    j'ai réussi à faire mon makefile qui appelle d'autres sous makefile mais j'ai un autre soucis

    en fait j'utilise une lib s'appelant pcms_api.h et une autre s'appelant pcms_event.h

    Lors de la compilation j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    user_supplied.o(.text+0x74): In function `userSuppliedFunction':
    : undefined reference to `PcmsXmvaGetVal'
    user_supplied.o(.text+0x172): In function `userSuppliedFunction':
    : undefined reference to `PcmsXmvaGetVal'
    user_supplied.o(.text+0x19a): In function `userSuppliedFunction':
    : undefined reference to `PcmsXmvaGetVal'
    ce qui doit correspondre à mon appel à la fonction PcmsSvaGetVal dans mon code puisque dans pcms_api.h j'ai la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define PcmsSvaGetVal(v)            PcmsXmvaGetVal((v),0)
    donc pourquoi ai-je cette erreur?

  12. #12
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    j'ai l'arborescence suivante :

    -pcms_api
    --pcms_api.h
    --pcms-event.h
    --premium
    ---events
    ----autorisationBrancheProduit
    -----user_supplied.c
    -----makefile

    et dans $(ORACLE_HOME)/rdbms/public je dois utiliser le fichier oci.h
    et dans $(ORACLE_HOME)/lib je dois utiliser la librairie libclntsh.so

    j'ai donc le makefile 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
    19
    20
    21
     
    CC=gcc
    CFLAGS=-W -Wall -ansi -pedantic
    EXEC=user_supplied
    INCS= -I$../../../../pcms_api -I$(ORACLE_HOME)/rdbms/public
    LDFLAGS=-L$(ORACLE_HOME)/lib -lclntsh 
     
     
    all: $(EXEC)
     
    user_supplied: user_supplied.o
    	$(CC) -o $(EXEC) user_supplied.o $(INCS) $(LDFLAGS)  
     
    user_supplied.o: user_supplied.c
    	$(CC) $(INCS) $(CFLAGS) -o user_supplied.o -c user_supplied.c
     
    clean:
    	rm -rf *.o
     
    cleanall: clean
    	rm -rf $(EXEC)
    et l'erreur est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    gcc -o user_supplied user_supplied.o -I./../../../pcms_api -I/u01/app/oracle/product/db10.2.0/rdbms/public -L/u01/app/oracle/product/db10.2.0/lib -lclntsh
    user_supplied.o(.text+0xfa): In function `userSuppliedFunction':
    : undefined reference to `PcmsXmvaGetVal'
    user_supplied.o(.text+0x16f): In function `userSuppliedFunction':
    : undefined reference to `PcmsXmvaGetVal'
    user_supplied.o(.text+0x197): In function `userSuppliedFunction':
    : undefined reference to `PcmsXmvaGetVal'
    collect2: ld a retourné 1 code d'état d'exécution
    make: *** [user_supplied] Erreur 1
    ces fonctions sont pourtant définies dans pcms_api.h!

    d'ou vient le problème?

    merci d'avance

  13. #13
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    Quel est la lib ou le .c qui défini la fonction PcmsXmvaGetVal ?
    Il semble que tu l'ais oublié.

    Le .h ne fait que déclarer la fonction et il manque son "corps".

  14. #14
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    Je ne sais pas à quelle .c ou quelle lib ce fichier se rapporte!
    Comment le savoir?
    Il n'y a pas de pcms_api.c!
    Faut que je me débrouille pour trouver la bonne librairie alors?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compilation : gsed Introuvable
    Par naruto_dz dans le forum Ubuntu
    Réponses: 2
    Dernier message: 27/02/2008, 14h07
  2. Problème de compilation: fonction introuvable
    Par Bornerdogge dans le forum Ogre
    Réponses: 18
    Dernier message: 02/02/2007, 21h40
  3. [Compilation] Bibliothèque introuvable
    Par Julien Dufour dans le forum Access
    Réponses: 4
    Dernier message: 05/01/2007, 12h35
  4. Compilation package introuvable
    Par edwin301 dans le forum Maven
    Réponses: 1
    Dernier message: 25/10/2006, 16h50
  5. [POI] echec de compil, package introuvable
    Par hugo123 dans le forum Documents
    Réponses: 2
    Dernier message: 05/10/2005, 11h33

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