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 :

makefile avec des bibliothèques


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Points : 36
    Points
    36
    Par défaut makefile avec des bibliothèques
    Bonjour,

    J'ai un petit dm en C à faire : lissage d'une image. La plupart des fichiers sont fournis, j'ai pratiquement plus qu'à écrire le makefile.

    Problème : il y a des bibliothèques qui interviennent.

    J'ai un fichier affichage.c qui inclut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <stdlib.h>
    #include <stdio.h>
    #include "affichage.h"
    et un fichier affichage.h qui inclut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <X11/Xlib.h>
    #include <X11/Xutil.h>
    #include "image.h"

    J'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [...]
    affichage.o : affichage.c affichage.h Xlib.h Xutil.c
          gcc -Wall -g -c affichage.c -I/usr/include/X11/ -L/usr/lib/X11 -lX
    Bien sur j'ai testé pas mal de variantes, mais un peu au pif :
    1. faut-il mettre Xlib.so et Xutil.so dans la liste des dépendances ?
    2. Xutil est-elle une bibliothèque ? parce qu'elle ne s'appelle pas Xutillib.so ...
    3. Après une dizaine de tentatives, j'ai cherché les fichiers Xlib.h Xlib.so Xutil.h Xutil.so, mais j'ai pas trouvé Xlib.so ni Xutil.so ..... (j'ai fait un find /usr/ -iname "xutil*" mais j'ai pas le droit d'explorer tous les répertoires. J'ai aussi trouvé un dossier /usr/lib/X11 mais il est completement vide)


    Voila, merci de vos réponses

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    Bon j'ai continué à chercher un peu.
    Je mets tout, en espérant être clair, parce qu'il y a plein de fichiers


    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
    lissage : image.o affichage.o lissage.o tab2Ddynamique.o lisser.o
    	gcc -g lissage.o affichage.o lissage.o tab2Ddynamique.o lisser.o -o lissage
     
    lissage.o : lissage.c image.h lisser.h tab2Ddynamique.h affichage.h
    	gcc -Wall -g -c lissage.c
    #(j'ai un unistd.h dans l'entete, qui est bien dans /usr/include, mais encore une fois j'y pige rien. je sais pas si je dois le mettre dans les dépendances ou pas, si je dois spécifier -I/usr/include -Lchemin -lunistd.so ou pas...)
     
    affichage.o : affichage.c affichage.h
    #(j'ai pas mis les fichiers Xlib.h et Xutil.h dans les dépendances ça me générait une erreur.)
    	gcc -Wall -g -c affichage.c -I/usr/include/X11/
    #(là je suppose qu'il manque -Lchemin -lX -lXutil mais je connais pas le chemin...)
     
    image.o : image.c image.h tab2Ddynamique.h
    	gcc -Wall -g -c image.c
    # meme remarque je comprends pas comment gérer le string.h de l'en-tête...
     
    lisser.o : lisser.c lisser.h tab2Ddynamique.h
    	gcc -Wall -g -c lisser.c
     
    tab2Ddynamique.o : tab2Ddynamique.c tab2Ddynamique.h
    	gcc -Wall -g -c tab2Ddynamique.c
    en tete des fichiers
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    /* ---- en tete de affichage.c ----*/
    #include <stdlib.h>
    #include <stdio.h>
    #include "affichage.h"
     
    /* ---- en tete de affichage.h ----*/
    #include <X11/Xlib.h>
    #include <X11/Xutil.h>
    #include "image.h"
     
    /* ---- en tete de image.c ----*/
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "image.h"
    #include "tab2Ddynamique.h"
     
    /* ---- en tete de image.h ---- */
    rien
     
    /* ---- en tete de lissage.c ---- */
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include "image.h"
    #include "lisser.h"
    #include "tab2Ddynamique.h"
    #include "affichage.h"
     
    /* ---- pas de fichier lissage.h ---- */
     
    /* ---- en tete de lisser.c ---- */
    #include <stdio.h>
    #include "tab2Ddynamique.h"
    #include "lisser.h"
     
    /* ---- en tete de lisser.h ---- */
    #include "image.h"
    #include "affichage.h"
     
    /* ---- en tete de tab2Ddynamique.c ---- */
    #include <stdlib.h>
    #include <stdio.h>
    #include "tab2Ddynamique.h"
     
    /* ---- en tete de tab2Ddynamique.h ---- */
    #include "image.h"
    Je mets les messages d'erreur, meme s'il y en a pour des pages. Les messages sont explicites, mais malgré tout ça j'y arrive pas...

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    gcc -Wall -g -c image.c
    gcc -Wall -g -c affichage.c -I/usr/include/X11/
    In file included from affichage.c:10:
    affichage.h:6:22: error: X11/Xlib.h: Aucun fichier ou dossier de ce type
    affichage.h:7:23: error: X11/Xutil.h: Aucun fichier ou dossier de ce type
    In file included from affichage.c:10:
    affichage.h:14: error: expected specifier-qualifier-list before ‘Display’
    affichage.c: In function ‘initialiserAffichage’:
    affichage.c:17: error: ‘Window’ undeclared (first use in this function)
    affichage.c:17: error: (Each undeclared identifier is reported only once
    affichage.c:17: error: for each function it appears in.)
    affichage.c:17: error: expected ‘;’ before ‘racine’
    affichage.c:23: error: ‘Ecran’ has no member named ‘display’
    affichage.c:23: warning: implicit declaration of function ‘XOpenDisplay’
    affichage.c:29: warning: implicit declaration of function ‘DefaultScreen’
    affichage.c:29: error: ‘Ecran’ has no member named ‘display’
    affichage.c:30: error: ‘racine’ undeclared (first use in this function)
    affichage.c:30: warning: implicit declaration of function ‘RootWindow’
    affichage.c:30: error: ‘Ecran’ has no member named ‘display’
    affichage.c:31: warning: implicit declaration of function ‘BlackPixel’
    affichage.c:31: error: ‘Ecran’ has no member named ‘display’
    affichage.c:32: warning: implicit declaration of function ‘WhitePixel’
    affichage.c:32: error: ‘Ecran’ has no member named ‘display’
    affichage.c:35: error: ‘Ecran’ has no member named ‘fen’
    affichage.c:35: warning: implicit declaration of function ‘XCreateSimpleWindow’
    affichage.c:35: error: ‘Ecran’ has no member named ‘display’
    affichage.c:39: error: ‘Ecran’ has no member named ‘gc’
    affichage.c:39: warning: implicit declaration of function ‘XCreateGC’
    affichage.c:39: error: ‘Ecran’ has no member named ‘display’
    affichage.c:39: error: ‘Ecran’ has no member named ‘fen’
    affichage.c:40: warning: implicit declaration of function ‘XStoreName’
    affichage.c:40: error: ‘Ecran’ has no member named ‘display’
    affichage.c:40: error: ‘Ecran’ has no member named ‘fen’
    affichage.c:41: warning: implicit declaration of function ‘XMapWindow’
    affichage.c:41: error: ‘Ecran’ has no member named ‘display’
    affichage.c:41: error: ‘Ecran’ has no member named ‘fen’
    affichage.c:42: warning: implicit declaration of function ‘XMoveWindow’
    affichage.c:42: error: ‘Ecran’ has no member named ‘display’
    affichage.c:42: error: ‘Ecran’ has no member named ‘fen’
    affichage.c:44: error: ‘Ecran’ has no member named ‘nbEcran’
    affichage.c:44: error: ‘Ecran’ has no member named ‘display’
    affichage.c:47: error: ‘Ecran’ has no member named ‘nbPlans’
    affichage.c:47: warning: implicit declaration of function ‘DisplayPlanes’
    affichage.c:47: error: ‘Ecran’ has no member named ‘display’
    affichage.c:47: error: ‘Ecran’ has no member named ‘nbEcran’
    affichage.c:48: error: ‘Ecran’ has no member named ‘visual’
    affichage.c:48: warning: implicit declaration of function ‘XDefaultVisual’
    affichage.c:48: error: ‘Ecran’ has no member named ‘display’
    affichage.c:48: error: ‘Ecran’ has no member named ‘nbEcran’
    affichage.c:50: error: ‘Ecran’ has no member named ‘nbPlans’
    affichage.c:62: error: ‘Ecran’ has no member named ‘mask’
    affichage.c:62: error: ‘Ecran’ has no member named ‘visual’
    affichage.c:63: error: ‘Ecran’ has no member named ‘mask’
    affichage.c:63: error: ‘Ecran’ has no member named ‘visual’
    affichage.c:64: error: ‘Ecran’ has no member named ‘mask’
    affichage.c:64: error: ‘Ecran’ has no member named ‘visual’
    affichage.c:69: error: ‘Ecran’ has no member named ‘mask’
    affichage.c:70: error: ‘Ecran’ has no member named ‘shift’
    affichage.c:73: error: ‘Ecran’ has no member named ‘shift’
    affichage.c:75: error: ‘Ecran’ has no member named ‘bits’
    affichage.c:78: error: ‘Ecran’ has no member named ‘bits’
    affichage.c:83: error: ‘Ecran’ has no member named ‘tImage’
    affichage.c:90: error: ‘Ecran’ has no member named ‘ximage’
    affichage.c:90: warning: implicit declaration of function ‘XCreateImage’
    affichage.c:90: error: ‘Ecran’ has no member named ‘display’
    affichage.c:90: error: ‘Ecran’ has no member named ‘visual’
    affichage.c:91: error: ‘Ecran’ has no member named ‘nbPlans’
    affichage.c:91: error: ‘ZPixmap’ undeclared (first use in this function)
    affichage.c:92: error: ‘Ecran’ has no member named ‘tImage’
    affichage.c:93: warning: implicit declaration of function ‘XFlush’
    affichage.c:93: error: ‘Ecran’ has no member named ‘display’
    affichage.c: In function ‘libererAffichage’:
    affichage.c:100: error: ‘Ecran’ has no member named ‘tImage’
    affichage.c:103: warning: implicit declaration of function ‘XFreeGC’
    affichage.c:103: error: ‘Ecran’ has no member named ‘display’
    affichage.c:103: error: ‘Ecran’ has no member named ‘gc’
    affichage.c:106: warning: implicit declaration of function ‘XDestroyWindow’
    affichage.c:106: error: ‘Ecran’ has no member named ‘display’
    affichage.c:106: error: ‘Ecran’ has no member named ‘fen’
    affichage.c:109: warning: implicit declaration of function ‘XCloseDisplay’
    affichage.c:109: error: ‘Ecran’ has no member named ‘display’
    affichage.c: In function ‘afficherImage’:
    affichage.c:123: error: ‘Ecran’ has no member named ‘bits’
    affichage.c:124: error: ‘Ecran’ has no member named ‘shift’
    affichage.c:124: error: ‘Ecran’ has no member named ‘mask’
    affichage.c:126: warning: implicit declaration of function ‘XPutPixel’
    affichage.c:126: error: ‘Ecran’ has no member named ‘ximage’
    affichage.c:128: warning: implicit declaration of function ‘XPutImage’
    affichage.c:128: error: ‘Ecran’ has no member named ‘display’
    affichage.c:128: error: ‘Ecran’ has no member named ‘fen’
    affichage.c:128: error: ‘Ecran’ has no member named ‘gc’
    affichage.c:128: error: ‘Ecran’ has no member named ‘ximage’
    affichage.c:130: error: ‘Ecran’ has no member named ‘display’
    affichage.c: In function ‘changerLigne’:
    affichage.c:142: error: ‘Ecran’ has no member named ‘bits’
    affichage.c:143: error: ‘Ecran’ has no member named ‘shift’
    affichage.c:143: error: ‘Ecran’ has no member named ‘mask’
    affichage.c:145: error: ‘Ecran’ has no member named ‘ximage’
    affichage.c:147: error: ‘Ecran’ has no member named ‘display’
    affichage.c:147: error: ‘Ecran’ has no member named ‘fen’
    affichage.c:147: error: ‘Ecran’ has no member named ‘gc’
    affichage.c:147: error: ‘Ecran’ has no member named ‘ximage’
    affichage.c:149: error: ‘Ecran’ has no member named ‘display’
    affichage.c: In function ‘changerBloc’:
    affichage.c:163: error: ‘Ecran’ has no member named ‘bits’
    affichage.c:164: error: ‘Ecran’ has no member named ‘shift’
    affichage.c:164: error: ‘Ecran’ has no member named ‘mask’
    affichage.c:166: error: ‘Ecran’ has no member named ‘ximage’
    affichage.c:168: error: ‘Ecran’ has no member named ‘display’
    affichage.c:168: error: ‘Ecran’ has no member named ‘fen’
    affichage.c:168: error: ‘Ecran’ has no member named ‘gc’
    affichage.c:168: error: ‘Ecran’ has no member named ‘ximage’
    affichage.c:170: error: ‘Ecran’ has no member named ‘display’
    make: *** [affichage.o] Erreur 1
    Voila c'est un peu lourd, je demande pas que vous m'écriviez mon makefile, mais au moins avoir des petites explications sur la façon de gérer les bibliothèques. (plus détaillées que : gcc -Wall -g -c -Ichemin -Lchemin -lbibli toto.c svp )

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    salut,

    affichage.h:6:22: error: X11/Xlib.h: Aucun fichier ou dossier de ce type
    affichage.h:7:23: error: X11/Xutil.h: Aucun fichier ou dossier de ce type
    soit le chemin vers ces deux bibliotèques n'est pas bon, soit elles ne sont pas installées.
    Regarde du coté de libx11-dev

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    Merci pour la réponse,

    Le problème c'est que je travaille sur les ordis de l'école (via ssh). Je peux donc rien installer :S

    edit : A part le fait que les fichiers sont pas présents mn makefile te parait correct ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    Re-bonjour,

    J'ai pas vraiment avancé, mais j'ai compris un truc :
    Il faut mettre le chemin complet des headers dans les dépendances.
    Cela dit c'est un peu bête je trouve : à quoi sert l'option -I dans la commande de compilation si on met déjà le chemin complet dans les dépendances ?

    Bref il me reste des erreurs mais beaucoup moins


    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    gcc -g lissage.o affichage.o lissage.o tab2Ddynamique.o lisser.o -o lissage
     
    lissage.o: In function `main':
    /mci/ei1013/henry_co/CSC3002/lissage_image/lissage.c:11: multiple definition of `main'
    #Je comprends pas le message précédent, j'ai bien une seule fonction main dans mon fichier....
     
    lissage.o:/mci/ei1013/henry_co/CSC3002/lissage_image/lissage.c:11: first defined here
    #celui ci non plus je le comprends pas....
     
    lissage.o: In function `main':
    lissage.c:(.text+0xbd): undefined reference to `lireImage'
    lissage.c:(.text+0x1aa): undefined reference to `ecrireImage'
    #Là je comprends pas non plus : lireImage et ecrireImage sont définies
    #dans image.h, et j'ai mis image.h dans les dépendances pour la création de
    #lissage.o (cf mon makefile). En plus l'erreur devrait apparaitre avant
    #l'édition des liens, lors de la création de lissage.o  non ?
     
    # Tout ce qui suit c'est parce qu'il manque les librairies mais j'y peux pas grand chose je pense.
    affichage.o: In function `initialiserAffichage':
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:23: undefined reference to `XOpenDisplay'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:35: undefined reference to `XCreateSimpleWindow'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:39: undefined reference to `XCreateGC'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:40: undefined reference to `XStoreName'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:41: undefined reference to `XMapWindow'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:42: undefined reference to `XMoveWindow'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:48: undefined reference to `XDefaultVisual'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:90: undefined reference to `XCreateImage'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:93: undefined reference to `XFlush'
    affichage.o: In function `libererAffichage':
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:103: undefined reference to `XFreeGC'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:106: undefined reference to `XDestroyWindow'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:109: undefined reference to `XCloseDisplay'
    affichage.o: In function `afficherImage':
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:128: undefined reference to `XPutImage'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:130: undefined reference to `XFlush'
    affichage.o: In function `changerLigne':
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:147: undefined reference to `XPutImage'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:149: undefined reference to `XFlush'
    affichage.o: In function `changerBloc':
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:168: undefined reference to `XPutImage'
    /mci/ei1013/henry_co/CSC3002/lissage_image/affichage.c:170: undefined reference to `XFlush'
    lissage.o: In function `main':
    lissage.c:(.text+0xbd): undefined reference to `lireImage'
    lissage.c:(.text+0x1aa): undefined reference to `ecrireImage'
    collect2: ld a retourné 1 code d'état d'exécution
    make: *** [lissage] Erreur 1
    Je vous mets mon dernier makefile :

    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
    lissage : image.o affichage.o lissage.o tab2Ddynamique.o lisser.o
            gcc -g lissage.o affichage.o lissage.o tab2Ddynamique.o lisser.o -o lissage
     
    lissage.o : lissage.c image.h lisser.h tab2Ddynamique.h affichage.h /usr/include/unistd.h
            gcc -Wall -g -c lissage.c
     
    affichage.o : affichage.c affichage.h /usr/include/X11/Xlib.h /usr/include/X11/Xutil.h
            gcc -Wall -g -c -I/usr/include/X11/ affichage.c
     
    image.o : image.c image.h tab2Ddynamique.h /usr/include/string.h
            gcc -Wall -g -c image.c
     
    lisser.o : lisser.c lisser.h tab2Ddynamique.h
            gcc -Wall -g -c lisser.c
     
    tab2Ddynamique.o : tab2Ddynamique.c tab2Ddynamique.h
            gcc -Wall -g -c tab2Ddynamique.c

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par silma Voir le message
    J'ai pas vraiment avancé, mais j'ai compris un truc :
    Il faut mettre le chemin complet des headers dans les dépendances.
    Cela dit c'est un peu bête je trouve : à quoi sert l'option -I dans la commande de compilation si on met déjà le chemin complet dans les dépendances ?
    C'est dû à une petite erreur de ta part : tu spécifies « /usr/include/X11 » avec l'option -I (« i » majuscule) mais tu inclus également « X11/Xlib.h ». Donc, le chemin complet qui en résulte est « /usr/include/X11/X11/Xlib.h ». Il y a un X11 en trop et le compilateur ne trouve pas. Si tu mets un chemin complet commençant par un slash, il va chercher directement ce fichier plutôt que passer en revue les chemins préfixes.

    Retire le chemin complet que tu as mis dans ton code pour revenir aux headers canoniques tels que décrits dans les synopsis des man pages et corrige tes -I. À la limite, tu ne devrais pas avoir besoin de « /usr/include ». Tu peux donc les retirer complètement.

    Enfin, il faut bien se rappeler que ce que tu inclus avec #include, ce sont les fichiers de prototypes indiquant à ton compilateur la manière dont on se sert des fonctions proposées par les bibliothèques. Ce ne sont pas les bibliothèques elles-mêmes.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    Merci pour ta réponse

    mais j'y arrive toujours pas (et ça commence a vraiment me souler au bout de trois jours). Par exemple avec string.h : normalement c'est facile, il est dans /usr/include. Si je t'ai bien compris il faudrait que je mette ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    image.o : image.c image.h tab2Ddynamique.h string.h
            gcc -Wall -g -c -I/usr/include image.c
    ou ça (puisque /usr/include est le répertoire par défaut, pas besoin de -I normalement...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    image.o : image.c image.h tab2Ddynamique.h string.h
            gcc -Wall -g -c image.c
    Mais toujours la meme réponse "pas de rêgle pour fariquer string.h" etc.

    edit : dans mon cours il est écrit "Option -I : permet de spécifier où trouver les fichiers d’en-tête quand ils ne sont pas dans le répertoire « standard » /usr/include." Alors pourquoi il est pas content avec cette deuxième solution mon abruti d'ordi ?

    Pour les fichiers Xlib.h et Xutil.h j'ai fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    affichage.o : affichage.c affichage.h image.h Xlib.h Xutil.h
            gcc -Wall -g -c -IX11/ affichage.c
    Mais comme ça bloque avant je peux meme pas savoir si ça marche.


    Sinon j'ai pas trouvé le man makefile dont tu parles en plus "Il n'y a pas de page de manuel pour makefile."

    Merci de votre aide en tout cas

    edit2 : 34ans, evry, modérateur sur developpez.com... tu ne serais pas prof à l'INT par hasard ?

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    pas besoin d'inclure string.h dans ta règle, ca ne fonctionne pas comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    image.o : image.c image.h tab2Ddynamique.h 
            gcc -Wall -g -c image.c

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par silma Voir le message
    Mais toujours la meme réponse "pas de rêgle pour fariquer string.h" etc.
    Il faut lire le début de la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make: *** Pas de règle pour fabriquer la cible « string.h »…
    C'est un message de make que tu reçois là. Pas de gcc.
    C'est dû au fait que tu as mis « string.h » dans les dépendances de ton fichier, ce qui est une fausse bonne idée.

    D'abord, à l'inverse de tes propres headers qui font partie de ton projet, « string.h » est un fichier de headers standard qui n'est pas censé évoluer, et encore moins entre deux compilations.

    Ensuite, il faut comprendre comment make fonctionne : il n'est pas du tout lié au langage C en particulier, et peut être utilisé pour gérer la construction de projets qui n'ont même pas forcément trait à la programmation.

    L'idée est que make va tâcher de générer le fichier dont la règle porte le nom. Pour cela, il va d'abord vérifier si celui-ci existe déjà. Si c'est le cas, il ressort en disant « Rien à faire ». Sinon, il va exécuter la commande associée pour le produire. Maintenant, si tu as des dépendances, make va également s'assurer que les fichiers nécessaires à la création du fichier sont bien là et vérifier si leur date de dernière modification est plus récente que celle du fichier concerné par la règle. Si c'est le cas, alors il considère que ces fichiers ont été modifiés depuis la dernière compilation, considérer que la cible n'est donc plus à jour, et la recompiler.

    Or, dans ton cas, tu spécifies « string.h » dans les dépendances. Il cherche donc un fichier nommé ainsi dans le répertoire courant (sans le trouver, évidemment). Et tout cela, indépendamment des options de gcc.

    Donc, il faut virer de ton Makefile toutes les références aux fichiers qui ne font pas partie de ton projet et qui ne risquent pas d'être modifiés entre temps, voire même par l'action du compilateur.

    edit : dans mon cours il est écrit "Option -I : permet de spécifier où trouver les fichiers d’en-tête quand ils ne sont pas dans le répertoire « standard » /usr/include." Alors pourquoi il est pas content avec cette deuxième solution mon abruti d'ordi ?
    En dehors de ce que l'on vient de dire, quand tu fais #include <X11/Xlib.h>, le compilo va chercher un fichier X11/Xlib.h dans /usr/include. Ça signifie qu'il y a un répertoire « X11 » dans /usr/include au milieu des fichiers de headers, qui lui contient entre autres Xlib.h et Xutil.h.

    Donc /usr/include est standard, doit être implicite et est passé si nécessaire au compilateur via l'option -I, et « X11/Xlib.h » est écrit de manière explicite dans le code.

    Sinon j'ai pas trouvé le man makefile dont tu parles en plus "Il n'y a pas de page de manuel pour makefile."
    Essaie plutôt man make ou info make.

    edit2 : 34ans, evry, modérateur sur developpez.com... tu ne serais pas prof à l'INT par hasard ?
    Pas vraiment, non. :-) Mais la comparaison me flatte.
    À bientôt.

Discussions similaires

  1. Lien avec des bibliothèques externes
    Par StingerBell dans le forum Qt Creator
    Réponses: 0
    Dernier message: 21/12/2014, 11h30
  2. Réponses: 2
    Dernier message: 27/10/2007, 10h16
  3. [MCRYPT] Est-il possible de crypter des fichiers avec les bibliothèques de hash ?
    Par a028762 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 01/12/2006, 09h18
  4. Makefile avec des conditions
    Par meufeu dans le forum Linux
    Réponses: 2
    Dernier message: 04/08/2006, 11h46
  5. Problème avec la "Gestion des bibliothèques dynamiques"
    Par GoustiFruit dans le forum Delphi
    Réponses: 15
    Dernier message: 31/05/2006, 09h54

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