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 :

Erreur de type undefined reference to `_imp_*'


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Points : 47
    Points
    47
    Par défaut Erreur de type undefined reference to `_imp_*'
    Bonsoir,

    Voilà plusieurs heures que je cherche, et impossible de résoudre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -D_WIN32 -DMY_USE_MEMORY -DMY_USE_ASSERT -DQT_DLL -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Programmation\QtSDK\Desktop\Qt\4.8.1\mingw\include" -I"Source" -I"..\..\Library\Source" -I"c:\Programmation\QtSDK\Desktop\Qt\4.8.1\mingw\include\ActiveQt" -I"Build\Win32\Debug\Moc" -I"c:\Programmation\QtSDK\Desktop\Qt\4.8.1\mingw\mkspecs\win32-g++" -o Build\Win32\Debug\Object\Main.o Source\Main.cpp
    g++ -mthreads -Wl,-subsystem,windows -o Build\Win32\Debug\Playground.exe Build/Win32/Debug/Object/Main.o  -L"c:\Programmation\QtSDK\Desktop\Qt\4.8.1\mingw\lib" -lmingw32 -lqtmaind -L../../Library/Build/Win32/Debug/ -lMyEngine 
    mingw32-make.exe[1]: Leaving directory `F:/Programmation/MyEngine/Sample/Playground'
    Build/Win32/Debug/Object/Main.o: In function `main':
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:12: undefined reference to `_imp___ZN2My6WindowD1Ev'
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:10: undefined reference to `_imp___ZN2My6WindowD1Ev'
    collect2: ld returned 1 exit status
    mingw32-make.exe[1]: *** [Build\Win32\Debug\Playground.exe] Error 1
    mingw32-make.exe: *** [debug] Error 2
    20:15:46: Le processus "C:\Programmation\QtSDK\mingw\bin\mingw32-make.exe" s'est terminé avec le code 2.
    Erreur à la compilation du projet MyEngine (cible : Desktop)
    Lors de l'exécution de l'étape "Make"
    J'utilise qt-creator pour la gestion du projet, dont voici le .pro.

    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
    115
    116
    117
    118
     
    TARGET = Playground
     
    QT -= \
        core \
        gui \
    
    INCLUDEPATH += \
         ./Source \
         ../../Library/Source \
    
    DEPENDPATH += \
         ./Source \
         ../../Library/Source \
    
    ############################################################
    # Windows specific settings.
    ############################################################
    win32 {
     
        ############################################################
        # Build dependant paths.
        ############################################################
        CONFIG(debug, debug|release) {
     
            DESTDIR = Build/Win32/Debug
            OBJECTS_DIR = Build/Win32/Debug/Object
            MOC_DIR = Build/Win32/Debug/Moc
     
        } else {
     
            DESTDIR = Build/Win32/Release
            OBJECTS_DIR = Build/Win32/Release/Object
            MOC_DIR = Build/Win32/Release/Moc
     
        }
     
        ############################################################
        # Libraries.
        ############################################################
        CONFIG(debug, debug|release) {
     
            LIBS += -L../../Library/Build/Win32/Debug/ -lMyEngine
     
        } else {
     
            LIBS += -L../../Library/Build/Win32/Release/ -lMyEngine
     
        }
     
        ############################################################
        # Defines.
        ############################################################
        DEFINES += \
            _WIN32 \
    }
     
    ############################################################
    # Unix specific settings.
    ############################################################
    unix {
     
        ############################################################
        # Build dependant paths.
        ############################################################
        CONFIG(debug, debug|release) {
     
            DESTDIR = Build/Unix/Debug
            OBJECTS_DIR = Build/Unix/Debug/Object
            MOC_DIR = Build/Unix/Debug/Moc
     
        } else {
     
            DESTDIR = Build/Unix/Release
            OBJECTS_DIR = Build/Unix/Release/Object
            MOC_DIR = Build/Unix/Release/Moc
     
        }
     
        ############################################################
        # Libraries.
        ############################################################
        CONFIG(debug, debug|release) {
     
            LIBS += -L../../Library/Build/Unix/Debug/ -lMyEngine
     
        } else {
     
            LIBS += -L../../Library/Build/Unix/Release/ -lMyEngine
     
        }
     
        ############################################################
        # Defines.
        ############################################################
        DEFINES += X11 \
    }
     
    ############################################################
    # Compiler flags.
    ############################################################
    ############################################################
    # Headers.
    ############################################################
     
     
    ############################################################
    # Sources.
    ############################################################
    SOURCES += \
        Source/Main.cpp \
    
    ############################################################
    # Defines.
    ############################################################
    DEFINES += \
        MY_USE_MEMORY \
        MY_USE_ASSERT \
    Pour finir voici le fichier Main.cpp :

    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
     
     
    #include "Core/Application.hpp"
    #include "Core/Window.hpp"
     
    int main(int argc, char *argv[])
    {
     
        // Ici il est étonnant que cette méthode ne pose aucun problème...
        My::Window::Initialize();
     
        My::Window main_window("test");
     
        return 0;
    }
    Je parviens à instancier certaines des classes de ma .dll alors que d'autres non.

    Par exemple si je commente la LIBS dans le .pro j'obtiens le même type d'erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:8: undefined reference to `_imp___ZN2My5MutexC1Eb'
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:9: undefined reference to `_imp___ZN2My5Mutex4LockEv'
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:11: undefined reference to `_imp___ZN2My5Mutex6UnlockEv'
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:14: undefined reference to `_imp___ZN2My6Window10InitializeEv'
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:16: undefined reference to `_imp___ZN2My6WindowC1ERKSsjj'
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:17: undefined reference to `_imp___ZN2My6Window10InitializeEv'
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:16: undefined reference to `_imp___ZN2My6WindowD1Ev'
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:19: undefined reference to `_imp___ZN2My6WindowD1Ev'
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:19: undefined reference to `_imp___ZN2My6WindowD1Ev'
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:19: undefined reference to `_imp___ZN2My5MutexD1Ev'
    F:\Programmation\MyEngine\Sample\Playground/Source/Main.cpp:19: undefined reference to `_imp___ZN2My5MutexD1Ev'
    Merci.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    ceci est une erreur du linker qui ne trouve pas les fonctions.
    Tu as dû oublier de lier des librairies.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Points : 47
    Points
    47
    Par défaut
    C'est justement là que c'est surprenant puisque j'ai bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -L../../Library/Build/Win32/Debug/ -lMyEngine
    Et que je peux compiler sans erreurs :

    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
     
    #include "Concurrent/Mutex.hpp"
    #include "Core/Application.hpp"
    #include "Core/Window.hpp"
     
    int main(int argc, char *argv[])
    {
        // My::Mutex fait bien partie de la lib liée plus haut
        My::Mutex mutex;
        mutex.Lock();
        mutex.Unlock();
     
        // Ici pas de problème, pourtant l'implémentation de Initialize() est dans le
        // même fichier que le constructeur.
        My::Window::Initialize();
     
        // Erreur.
        My::Window main_window("test");
     
        return 0;
    }
    Donc je pense que la lib est bien linkée et que le problème vient d'autre part.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Points : 47
    Points
    47
    Par défaut
    RESOLU : Window.cpp ne définissait pas le destructeur...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/08/2011, 13h25
  2. Erreur de compilation "undefined reference"
    Par aljekeny dans le forum Débuter
    Réponses: 14
    Dernier message: 06/01/2009, 12h14
  3. Erreur au link undefined reference to wxOnAssert
    Par Muetdhiver dans le forum wxWidgets
    Réponses: 3
    Dernier message: 16/06/2008, 10h59
  4. Obtention de multiples erreurs de type "undefined index"
    Par issamsanaa dans le forum Langage
    Réponses: 5
    Dernier message: 07/05/2008, 02h22
  5. Réponses: 2
    Dernier message: 27/03/2008, 17h57

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