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

Code::Blocks Discussion :

undefined reference to 'fonction()' avec code block


Sujet :

Code::Blocks

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    69
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 69
    Par d�faut undefined reference to 'fonction()' avec code block
    Salut � tous,

    Pour un projet perso d'�lectronique, je d�veloppe une IHM PC avec l'aide de la librairie GTK+. J'ai d�j� tent� l'exp�rience dans le pass� avec succ�s.

    Aujourd'hui, la compilation �choue sit�t que mes fonctions sont �clat�es dans diff�rents fichiers header/source:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Build Message:
     
    obj\Debug\main.o: In function `main':
    Y:/Documents/Dev/CodeBlocks/Test/TestHeader/main.cpp:42: undefined reference to `onDestroyWindow(_GtkWidget*, void*)'
    Y:/Documents/Dev/CodeBlocks/Test/TestHeader/main.cpp:43: undefined reference to `onDeleteEventWindow(_GtkWidget*, void*)'
    Y:/Documents/Dev/CodeBlocks/Test/TestHeader/main.cpp:48: undefined reference to `onClickedQuit(_GtkWidget*, void*)'
    Y:/Documents/Dev/CodeBlocks/Test/TestHeader/main.cpp:51: undefined reference to `onClickedConnect(_GtkWidget*, void*)'
    Y:/Documents/Dev/CodeBlocks/Test/TestHeader/main.cpp:54: undefined reference to `onClickedLoad(_GtkWidget*, void*)'
    Y:/Documents/Dev/CodeBlocks/Test/TestHeader/main.cpp:57: undefined reference to `onClickedSave(_GtkWidget*, void*)'
    collect2.exe: error: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 1 seconds)
    6 errors, 0 warnings (0 minutes, 1 seconds)
    Par contre, si je regroupe tout dans mon main.c aucun probl�me, je peux executer et debugger le programme sans probl�me...

    Je ne vois pas ce qu'il me manque, surement un oubli au niveau de la config de l'IDE, mais je s�che compl�tement. Voici mon code:

    main.c:
    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
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    #include "Test.h"
     
     
    int main(int argc,char **argv)
    {
        /*
         ***************************
         * Declaration des WidGets *
         ***************************
         */
        GtkWidget *pMainWindow = NULL;
     
        GtkWidget *pQuitBtn = NULL;
        GtkWidget *pConnectBtn = NULL;
        GtkWidget *pLoadBtn = NULL;
        GtkWidget *pSaveBtn = NULL;
     
        GtkWidget *pTable = NULL;
     
     
        // GTK+ Initialisation
        gtk_init(&argc,&argv);
     
        // Build main window
        pMainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_position(GTK_WINDOW(pMainWindow), GTK_WIN_POS_CENTER);
        gtk_window_set_title(GTK_WINDOW(pMainWindow), "MyApplication");
        gtk_window_set_default_size(GTK_WINDOW(pMainWindow), 640, 480);
        gtk_container_set_border_width(GTK_CONTAINER(pMainWindow),20);
     
        g_signal_connect(G_OBJECT(pMainWindow), "destroy", G_CALLBACK(onDestroyWindow), NULL);          // "destroy" est émis lorsque l'objet est détruis
        g_signal_connect(G_OBJECT(pMainWindow), "delete-event", G_CALLBACK(onDeleteEventWindow), NULL); // "delete_event" est émis quand l'utilisateur veut détruire un objet
     
     
        // Build Buttons
        pQuitBtn = gtk_button_new_from_stock(GTK_STOCK_QUIT);
        g_signal_connect(G_OBJECT(pQuitBtn), "clicked", G_CALLBACK(onClickedQuit), NULL);
     
        pConnectBtn = gtk_button_new_with_mnemonic("_Connect");
        g_signal_connect(G_OBJECT(pConnectBtn), "clicked", G_CALLBACK(onClickedConnect), NULL);
     
        pLoadBtn = gtk_button_new_with_mnemonic("_Load File");
        g_signal_connect(G_OBJECT(pLoadBtn), "clicked", G_CALLBACK(onClickedLoad), NULL);
     
        pSaveBtn = gtk_button_new_with_mnemonic("_Save File");
        g_signal_connect(G_OBJECT(pSaveBtn), "clicked", G_CALLBACK(onClickedSave), NULL);
     
        pTable = gtk_table_new(6, 2, TRUE);
        gtk_container_add(GTK_CONTAINER(pMainWindow), pTable);
        gtk_table_attach(GTK_TABLE(pTable), pConnectBtn,     0, 1, 1, 2, GTK_EXPAND, GTK_EXPAND, 0, 0);
        gtk_table_attach(GTK_TABLE(pTable), pQuitBtn,        1, 2, 1, 2, GTK_EXPAND, GTK_EXPAND, 0, 0);
        gtk_table_attach(GTK_TABLE(pTable), pLoadBtn,        0, 1, 3, 4, GTK_EXPAND, GTK_EXPAND, 0, 0);
        gtk_table_attach(GTK_TABLE(pTable), pSaveBtn,        1, 2, 3, 4, GTK_EXPAND, GTK_EXPAND, 0, 0);
     
     
        // Display and event loop
        gtk_widget_show_all(pMainWindow);
     
        gtk_main();
     
        // exit
        gtk_exit(EXIT_SUCCESS);
        return EXIT_SUCCESS;
    }
    Test.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #ifndef TEST_H_INCLUDED
    #define TEST_H_INCLUDED
     
    void onDestroyWindow(GtkWidget *pWidget, gpointer data);
    gboolean onDeleteEventWindow(GtkWidget *pWidget, gpointer data);
    void onClickedQuit(GtkWidget *pWidget, gpointer data);
    void onClickedConnect(GtkWidget *pWidget, gpointer data);
    void onClickedLoad(GtkWidget *pWidget, gpointer data);
    void onClickedSave(GtkWidget *pWidget, gpointer data);
     
    #endif // TEST_H_INCLUDED
    Test.c
    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
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    void onDestroyWindow(GtkWidget* pWidget, gpointer data)
    {
        gtk_main_quit();
    }
     
    gboolean onDeleteEventWindow(GtkWidget* pWidget, gpointer data)
    {
        GtkWidget *pDialog = NULL;
        gboolean ContinueFlag = TRUE;
     
     
        pDialog = gtk_message_dialog_new(GTK_WINDOW(pWidget),
                                         GTK_DIALOG_MODAL,
                                         GTK_MESSAGE_QUESTION,
                                         GTK_BUTTONS_YES_NO,
                                         "Are you sure you want to quit?");
     
        switch(gtk_dialog_run(GTK_DIALOG((GtkWidget*)pDialog)))
        {
            case GTK_RESPONSE_YES:
            {
                gtk_main_quit();
                ContinueFlag = FALSE;
                break;
            }
     
            case GTK_RESPONSE_NO:
            {
                gtk_widget_destroy(pDialog);
                break;
            }
        }
     
        return ContinueFlag;
    }
     
    void onClickedQuit(GtkWidget *pWidget, gpointer data)
    {
        GtkWidget *pQuitBox = NULL;
     
     
        pQuitBox = gtk_message_dialog_new(NULL, //GTK_WINDOW(pWidget),
                                         GTK_DIALOG_MODAL,
                                         GTK_MESSAGE_QUESTION,
                                         GTK_BUTTONS_YES_NO,
                                         "Are you sure you want to quit?");
     
        //gtk_window_set_title(GTK_WINDOW(pQuitBox), "Question");
        //gtk_window_set_position(GTK_WINDOW(pQuitBox), GTK_WIN_POS_MOUSE);
     
        switch(gtk_dialog_run(GTK_DIALOG(pQuitBox)))
        {
            case GTK_RESPONSE_YES:
            {
                gtk_main_quit();
                break;
            }
     
            case GTK_RESPONSE_NO:
            case GTK_RESPONSE_NONE:
            default:
            {
                gtk_widget_destroy(pQuitBox);
                break;
            }
        }
    }
     
    void onClickedConnect(GtkWidget* pWidget, gpointer data)
    {
        printf("CONNECT button pushed\n");
    }
     
    void onClickedLoad(GtkWidget* pWidget, gpointer data)
    {
        printf("LOAD button pushed\n");
    }
     
    void onClickedSave(GtkWidget* pWidget, gpointer data)
    {
        printf("SAVE button pushed\n");
    }

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert

    Avatar de germinolegrand
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Octobre 2010
    Messages
    738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Par d�faut
    Bonjour !
    As-tu ajout� le fichier test.c au projet ?

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    69
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 69
    Par d�faut
    Oui bien sur, ils apparaissent tous dans l'arbre du workspace.

    Mais le probl�me vient bien de ce fichier, car j'ai test� la manip' suivante:

    Si je place les prototypes des fonctions dans "Test.h", que j'ajoute #include "Test.h" en t�te du fichier main.c et que je d�clare le corps des fonctions dans le main.c, apr�s la fonction main() => �a fonctionne

    Mais si t�t que je d�clare le corps des fonctions dans le Test.c, je me retrouve avec les erreurs pr�c�dentes

  4. #4
    Membre Expert

    Avatar de germinolegrand
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Octobre 2010
    Messages
    738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Par d�faut
    mmh...
    En faisant clic droit sur le fichier, onglet build, tout est bien coch� ?

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    69
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 69
    Par d�faut
    Citation Envoy� par germinolegrand Voir le message
    mmh...
    En faisant clic droit sur le fichier, onglet build, tout est bien coch� ?
    Oui tout est bien coch�.

    Je viens de trouver mon erreur.

    En fait je travaille sur un MAC, sous Parallel pour avoir l'environnement Windows. Code::Blocks est install� sous windows car mon application est destin�e � un PC sous windows. Donc dans l'environnement Windows (Parallel), j'ai install� la librairie GTK+, sur le hdd c: , hors mon r�pertoire de travail �tait sur le disque y: (Mac)...

    J'ai d�plac� mon r�pertoire de travail sur le c:, et d�sormais tout fonctionne

    Il faut d�sormais que je trouve, ou je peux indiquer dans code::blocks, les r�pertoire ou il doit faire ses recherches de fichiers lors de la compile/link...

    Merci pour ton aide

  6. #6
    Membre Expert

    Avatar de germinolegrand
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Octobre 2010
    Messages
    738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Par d�faut
    Tr�s simple (une fois qu'on le sait) : Build Options, choix de la target, Search directories, Compiler ou Linker.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. "undefined reference to" fonction sous code::blocks
    Par Lerrak dans le forum Langage
    R�ponses: 4
    Dernier message: 10/06/2014, 14h35
  2. Undefined reference avec code blocks
    Par Airlink dans le forum D�buter
    R�ponses: 1
    Dernier message: 14/06/2008, 19h40
  3. R�ponses: 2
    Dernier message: 23/04/2007, 22h37
  4. [kjAPI] Compilation avec Code::Blocks
    Par ThomasCh dans le forum Moteurs 3D
    R�ponses: 5
    Dernier message: 17/10/2006, 09h01
  5. [d�butant]impossible d'�xecuter avec Code::blocks!
    Par Antigonos Ier Gonatas dans le forum Code::Blocks
    R�ponses: 6
    Dernier message: 31/05/2006, 19h53

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