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

GTK+ avec C & C++ Discussion :

compiler un projet gtk+ avec makefile


Sujet :

GTK+ avec C & C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Points : 7
    Points
    7
    Par défaut compiler un projet gtk+ avec makefile
    salut tout le monde je suis un debutant dans le developpement aussi je suis un nouveau membre de ce forum
    actuellement je travaille avec gtk+ et j'ai rencontre un probleme lors du compilation du projet en utilisant gcc,voici le resultat:
    gcc main.c -I/usr/include/callbacks.h -I /usr/include/error.h -o TESTGLADE `pkg-config --cflags --libs gtk+-2.0`
    (.text+0xb6): référence indéfinie vers « cb_quit »
    .text+0x1b3): référence indéfinie vers « cb_open »
    (.text+0x230): référence indéfinie vers « cb_quit »
    collect2: error: ld returned 1 exit status

    j'ai trouve qu'on peut utiliser un makefile mais je sais pas comment le faire..le projet contient les fichier suivant: main.c,callbacks.c,callbacks.h,error.c,error.h
    je serais tres reconnaissant si on me donne le code source du fichier makefile
    merci d'avance

  2. #2
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Salut, (et bienvenue)

    Peut être que ce Makefile pourrais te donner l'inspiration :

    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
     
    WARN = -Wall
    DEBUG = -g
    CC = gcc $(DEBUG) $(WARN)
    CFLAGS = `pkg-config --cflags gtk+-2.0`
    LDFLAGS = `pkg-config --libs gtk+-2.0`
    EXE = main
     
    OBJS = main.o callbacks.o error.o
     
    all:	$(OBJS)
    	$(CC) $(OBJS) -o $(EXE) $(LDFLAGS)
     
    clean:
    	rm -f *.o *~ $(EXE)
    @+

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    je te remercie ,je vais essayer avec ca
    merci encore
    @+

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par akashi4444 Voir le message
    salut tout le monde je suis un debutant dans le developpement aussi je suis un nouveau membre de ce forum
    actuellement je travaille avec gtk+ et j'ai rencontre un probleme lors du compilation du projet en utilisant gcc,voici le resultat:
    gcc main.c -I/usr/include/callbacks.h -I /usr/include/error.h -o TESTGLADE `pkg-config --cflags --libs gtk+-2.0`
    (.text+0xb6): référence indéfinie vers « cb_quit »
    .text+0x1b3): référence indéfinie vers « cb_open »
    (.text+0x230): référence indéfinie vers « cb_quit »
    collect2: error: ld returned 1 exit status

    j'ai trouve qu'on peut utiliser un makefile mais je sais pas comment le faire..le projet contient les fichier suivant: main.c,callbacks.c,callbacks.h,error.c,error.h
    je serais tres reconnaissant si on me donne le code source du fichier makefile
    merci d'avance
    Hormis ton questionnement sur le Makefile il me semble que les erreurs de compilations ne viennent pas d'un problème à la compilation. Mais plutôt que le compilateur ne trouve pas les définitions des fonctions cb_open(); et cb_quit();.

    Ce serait donc plutôt du côté du code source qu'il faudrait rechercher la solution...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    salut, ca a marche le fichier makefile que tu m'as donne a resolu le probleme,maintenant je peux compiler et executer mon projet
    merci encore une fois

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Points : 7
    Points
    7
    Par défaut ajout d'un fichier.h
    salut , je rencontre encore un probleme de compilation car j'ai ajouter un fichier "document.h" dans mon projet
    voici le message du terminal:
    callbacks.o: dans la fonction « open_file »:
    /home/thafer/test_glade/callbacks.c:53: référence indéfinie vers « docs »
    /home/thafer/test_glade/callbacks.c:54: référence indéfinie vers « docs »
    /home/thafer/test_glade/callbacks.c:57: référence indéfinie vers « docs »
    /home/thafer/test_glade/callbacks.c:59: référence indéfinie vers « docs »
    collect2: error: ld returned 1 exit status
    make: *** [all] Erreur 1

    je serais tres reconnaissant si on me donne comment faire avec mon make file pour ajouter le nouveau fichier.h
    voici le makefile


    WARN = -Wall
    DEBUG = -g
    CC = gcc $(DEBUG) $(WARN)
    CFLAGS = `pkg-config --cflags gtk+-2.0`
    LDFLAGS = `pkg-config --libs gtk+-2.0`
    EXE = main



    OBJS = main.o callbacks.o error.o

    all: $(OBJS)
    $(CC) $(OBJS) -o $(EXE) $(LDFLAGS)

    clean:
    rm -f *.o *~ $(EXE)

    merci d'avance

  7. #7
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Le fichier callbacks.c est-il situé dans le même répertoire que main.c ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    oui , toutes mes fichiers main.c ,callbacks.c,callbacks.h,error.c,error.h,document.h sont dans un meme repertoire
    j'ai besoin d'une mdification du makefile pour pouvoir compiler..car avant l'ajout du fichier document.h je peux compiler et executer le projet

  9. #9
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Un peut de lecture s'impose :
    http://gl.developpez.com/tutoriel/outil/makefile/

    le compilateur ne trouve pas les définitions des fonctions
    C'est un problème de "linkage".

    - Vérifie que le fichier document.o existe.
    - Vérifie que le compilateur lie le fichier document.o au programme.

    Ca fais quoi si tu exécute cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -o document.o -c document.c
    Sinon, cette commande résoudra tout tes problèmes:

  10. #10
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Quelle est donc cette référence vers "docs" dans ton projet ? Le problème venant de là puisque tous tes fichiers sont lus.

  11. #11
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    gerald3d, j'pense que "docs" doit-être une structure qui références ses document ouverts...

    Ca va sinon toi ? Tu prend un café ?

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    salut,je tiens a vous informer que je n'ai pas un fichier "document.c"
    uniquement "document.h" qui existe et que je l'utilise dans "callbacks.c" deja dans "callbacks.c" j'ai inclut le fichier "document.h" qui contient uniquement des definitions des structures .

  13. #13
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Peut être que si tu ajoutes "-I." dans la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFLAGS = `pkg-config --cflags gtk+-2.0`
    Pour obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFLAGS = `-I./ pkg-config --cflags gtk+-2.0`

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    salut,j'ai essaye avec ta solution ,malheuresement ca ne resout pas le probleme..meme message d'erreur
    callbacks.o: dans la fonction « open_file »:
    référence indéfinie vers « docs »
    callbacks.c:54: référence indéfinie vers « docs »
    callbacks.c:57: référence indéfinie vers « docs
    callbacks.c:59: référence indéfinie vers « docs »
    collect2: error: ld returned 1 exit status
    make: *** [all] Erreur 1

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    je rappelle que l'ajout de "document.h" a cause le probleme car avant j'avais pas des problemes de compilation ou d'execution
    le make file que je possede est celui-ci
    WARN = -Wall
    DEBUG = -g
    CC = gcc $(DEBUG) $(WARN)
    CFLAGS = ` pkg-config --cflags gtk+-2.0`
    LDFLAGS = `pkg-config --libs gtk+-2.0`
    EXE = main



    OBJS = main.o callbacks.o error.o

    all: $(OBJS)
    $(CC) $(OBJS) -o $(EXE) $(LDFLAGS)

    clean:
    rm -f *.o *~ $(EXE)

    ca marche lorsque j'avais les fichiers suivants:main.c,callbacks.c,callbacks.h,error.c,error.h
    lorsque j'ai ajoute le fichier "document.h" j'ai rencontre le prob de compilation

  16. #16
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Pourrait-on voir le fichier callbacks.c ?

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    oui,bien sure
    le voila

    #include "callbacks.h"
    #include "document.h"
    #include "error.h"

    static void open_file (const gchar *, GtkTextView *);

    void cb_open (GtkWidget *p_widget, gpointer user_data)
    {
    GtkWidget *p_dialog = NULL;
    p_dialog = gtk_file_chooser_dialog_new ("Ouvrir un fichier", NULL,
    GTK_FILE_CHOOSER_ACTION_OPEN,
    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
    GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
    NULL);
    if (gtk_dialog_run (GTK_DIALOG (p_dialog)) == GTK_RESPONSE_ACCEPT)
    {
    gchar *file_name = NULL;

    file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (p_dialog));
    open_file (file_name, GTK_TEXT_VIEW (user_data));
    g_free (file_name), file_name = NULL;
    }
    gtk_widget_destroy (p_dialog);

    /* Parametre inutilise */
    (void)p_widget;
    }

    void cb_quit (GtkWidget *p_widget, gpointer user_data)
    {
    gtk_main_quit();

    /* Parametres inutilises */
    (void)p_widget;
    (void)user_data;
    }

    static void open_file (const gchar *file_name, GtkTextView *p_text_view)
    {
    g_return_if_fail (file_name && p_text_view);
    {
    gchar *contents = NULL;

    if (g_file_get_contents (file_name, &contents, NULL, NULL))
    {
    /* Copie de contents dans le GtkTextView */
    gchar *utf8 = NULL;
    GtkTextIter iter;
    GtkTextBuffer *p_text_buffer = NULL;

    /* Pour l'instant il faut allouer la memoire, par la suite on modifiera
    simplement le pointeur */
    docs.actif = g_malloc (sizeof (*docs.actif));
    docs.actif->chemin = g_strdup (file_name);
    /* Pour l'instant, on se contente de stocker le seul GtkTextView qui existe,
    par la suite, il faudra en creer un nouveau ! */
    docs.actif->p_text_view = p_text_view;
    /* Le document vient d'etre ouvert, il n'est donc pas modifie */
    docs.actif->sauve = TRUE; p_text_buffer = gtk_text_view_get_buffer (p_text_view);
    gtk_text_buffer_get_iter_at_line (p_text_buffer, &iter, 0);
    utf8 = g_locale_to_utf8 (contents, -1, NULL, NULL, NULL);
    g_free (contents), contents = NULL;
    gtk_text_buffer_insert (p_text_buffer, &iter, utf8, -1);
    g_free (utf8), utf8 = NULL;
    }
    else
    {
    print_warning ("Impossible d'ouvrir le fichier %s\n", file_name);
    }
    }
    }

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    je suis persuade que le code source n'est pas le probleme...il s'agit d'un probleme de compilation
    je dois modifier le fichier makefile suite a l'ajout du fichier "document.h"
    mais j'arrive pas a le faire...si il s'agit d'un dichier source la modification dans makefile sera evidente...mais c un fichier.h

  19. #19
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    À quel moment la variable docs est-elle déclarée ? Dans documents.h ? Si oui il faut absolument une déclaration dans un fichier source.c pour que le compilateur puisse la prendre en compte.

  20. #20
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    je suis persuade que le code source n'est pas le probleme...
    Alors, le problème doit sûrement venir du code source ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    static Documents docs = {NULL, 0};
    //static Documents *docs = NULL;
    static void open_file (const gchar *, GtkTextView *);
    Sinon, par pure curiosité, qu'est-ce que tu obtiens si tu ajoute documents.h dans le Makefile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OBJS = main.o callbacks.o error.o documents.h

    PS: Pour l'amour du ciel, utilise la balise CODE (le bouton #)

Discussions similaires

  1. [Débuter] Compiler un projet créé avec une ancienne version de Qt
    Par khaled87 dans le forum Qt Creator
    Réponses: 2
    Dernier message: 05/12/2014, 11h25
  2. Réponses: 3
    Dernier message: 22/09/2013, 09h00
  3. Compiler un projet Maven avec Maven
    Par michel.di dans le forum Maven
    Réponses: 25
    Dernier message: 07/01/2012, 10h24
  4. Réponses: 2
    Dernier message: 02/04/2009, 16h42
  5. Impossible de compiler un projet avec #include <glib.h>
    Par canard75 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 14/12/2005, 18h18

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