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

Qt Discussion :

[Qt4] Pb compilation : Undefined symbols


Sujet :

Qt

  1. #1
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut [Qt4] Pb compilation : Undefined symbols
    salut, j'ai un problème lors de la compilation mais je comprends pas ou,
    pourriez vous m'aider, voici le message erreur :
    Citation Envoyé par compilation
    g++ -c -pipe -g -Wall -W -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.4.1/mkspecs/macx-g++ -I. -I/usr/local/Trolltech/Qt-4.4.1/lib/QtCore.framework/Headers -I/usr/local/Trolltech/Qt-4.4.1/include/QtCore -I/usr/local/Trolltech/Qt-4.4.1/include/QtCore -I/usr/local/Trolltech/Qt-4.4.1/lib/QtGui.framework/Headers -I/usr/local/Trolltech/Qt-4.4.1/include/QtGui -I/usr/local/Trolltech/Qt-4.4.1/include/QtGui -I/usr/local/Trolltech/Qt-4.4.1/include -I. -Isrc/coremanager -Isrc/mainInterface -Ibuild/moc -Ibuild/ui -F/usr/local/Trolltech/Qt-4.4.1/lib -o build/o/unix/GinnCore.o src/coremanager/GinnCore.cpp
    g++ -headerpad_max_install_names -o bin/Ginn++.app/Contents/MacOS/Ginn++.app build/o/unix/main.o build/o/unix/GinnCore.o build/o/unix/UIMain.o build/o/unix/moc_GinnCore.o build/o/unix/moc_UIMain.o build/o/unix/qrc_resources.o -F/usr/local/Trolltech/Qt-4.4.1/lib -L/usr/local/Trolltech/Qt-4.4.1/lib -framework QtGui -L/usr/local/Trolltech/Qt-4.4.1/lib -F/usr/local/Trolltech/Qt-4.4.1/lib -framework Carbon -framework AppKit -framework QtCore -lz -lm -framework ApplicationServices
    Undefined symbols:
    "GinnCore::mInstances", referenced from:
    __ZN8GinnCore10mInstancesE$non_lazy_ptr in GinnCore.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    make: *** [bin/Ginn++.app/Contents/MacOS/Ginn++.app] Error 1
    et voici la la class GinnCore qui semble posé problème.
    L'entete :
    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
    #ifndef GINNCORE_H
    #define GINNCORE_H
     
    #include <QObject>
    #include <QHash>
     
    class UIMain;
     
    class GinnCore : public QObject
    {
        Q_OBJECT
     
        public:
            static void init();
            static UIMain* mainWindow();
     
        private:
            static QHash<const QMetaObject*, QObject*> mInstances;
    };
     
    #endif // GINNCORE_H
    et le corp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include "GinnCore.h"
    #include "../maininterface/UIMain.h"
     
    void GinnCore::init()
    {
        mainWindow()->initGui();
    }
     
    UIMain* GinnCore::mainWindow()
    {
    	if ( !mInstances.contains( &UIMain::staticMetaObject ) )
    		mInstances[&UIMain::staticMetaObject] = new UIMain();
    	return qobject_cast<UIMain*>( mInstances[&UIMain::staticMetaObject] );
    }

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut
    as tu appliqué moc sur ton .h et ajouté le fichier généré à la compilation?

  3. #3
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    Euh peux tu développer, je débute avec QT, et je comprends pas ce dont tu me parle !

    Je sais pas si ça peux répondre à ta question, mais voici mon .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
    ######################################################################
    # Automatically generated by qmake (2.01a) ven. sept. 19 12:50:00 2008
    ######################################################################
     
    AUTHOR  = Guillaume Camus
    QT = gui core
    LANGUAGE = C++
    TEMPLATE = app
     
    win32:TARGET = Ginn++.exe
    win32:OBJECTS_DIR   += build/o/win32
     
    unix:TARGET = Ginn++_x11
    unix:OBJECTS_DIR    += build/o/unix
     
    mac:TARGET  = Ginn++.app
    mac:OBJECTS_DIR += build/o/mac
     
    RCC_DIR = build/rcc
    UI_DIR  = build/ui
    MOC_DIR = build/moc
     
    DESTDIR = bin
    LICENSE = GPL
    DEPENDPATH += . \
                src \
                src/coremanager \
                src/mainInterface
     
    INCLUDEPATH += . \
                src/coremanager \
                src/mainInterface
     
    RESOURCES = src/resources/resources.qrc
     
    # Input
    HEADERS += src/GinnStudio.h \
               src/coremanager/GinnCore.h \
               src/mainInterface/UIMain.h 
     
    SOURCES += src/main.cpp \
               src/coremanager/GinnCore.cpp \
               src/mainInterface/UIMain.cpp

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    ha non, c'est autre chose.

    Tu as definie des fonction est des membre static dans le .f.
    Seulement tu ne les as pas définie dans le .cpp
    http://cpp.developpez.com/faq/cpp/?p..._membre_static

    Par contre pourquoi faire une class où tout est static?

  5. #5
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    En faite je me base sur le code source de monkey Studio, que je décortique pas à pas, pour essayer de faire mon propre système de plugin sur mon application.

    Et dans monkeyStudio c'est en static .

    et merci pour l'aide ça ma débloquer.
    il fallait juste ajouté ceci dans le cpp.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QHash<const QMetaObject*, QObject*> GinnCore::mInstances;

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035

  7. #7
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    effectivement ça a l'air intéressant, je vais regarder de plus prêt.
    merci.

  8. #8
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    je comprends pas bien l'exemple que tu m'as transmis !
    Est ce que tu pourrais m'expliquer un peux le fonctionnement.

    Par exemple, j'ai fais un QmainWindow de base avec un QmenuBar et un QStatusBar.

    Et je souhaiterais faire un dock. Seulement j'aimerais que le dock soit un plugin qui soit charger au lancement de l'interface.

    Comment faire ?

    //EDIT : --------------

    Voici ce que j'ai pour le moment :
    Ma classe de plugin manager :
    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
     
    #ifndef PLUGINSMANAGER_H
    #define PLUGINSMANAGER_H
     
    class QString;
    class QStringList;
    class PluginInterface;
     
    class PluginManager
    {
     
    	public:
    	   PluginsManager( QObject* = 0 );
    	   ~PluginManager();
     
        private:
            QList<PluginInterface *> pluginList;
            PluginInterface * plugins( QString pluginName );
    };
     
    #endif // PLUGINSMANAGER_H
    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
     
    #include <QtGui>
    #include "PluginManager.h"
     
    PluginManager::PluginManager()
    {
        QDir pluginsDir = QDir(qApp->applicationDirPath());
        pluginsDir.cd("plugins");
     
        foreach (QString fileName, pluginsDir.entryList(QDir::Files))
        {
            QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
            QObject *plugin = loader.instance();
            if (plugin) 
            {
                PluginInterface * op = qobject_cast<PluginInterface *>(plugin);
                if (op) 
                {
                    pluginList << op;
                }
            }
        }
    }
    et l'interface :
    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
     
    #ifndef PLUGININTERFACE_H
    #define PLUGININTERFACE_H
     
    class QString;
    class QStringList;
     
    class PluginInterface
    {
    public:
        virtual ~PluginInterface() {}
    };
     
    Q_DECLARE_INTERFACE(PluginInterface,"Ginn.PluginInterface/1.0")
    #endif // PLUGININTERFACE_H
    mais je bloque un peu car je vois pas ou je vais et en plus je suis pas sûr que mon code est bon.
    Une bonne âme voudrais bien m'éclaircir et me conseiller ?

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par guiyomh Voir le message
    Est ce que tu pourrais m'expliquer un peux le fonctionnement.
    Le problème est que je n'ai pas encore essayé tout cela.
    Tu as cette exemple sinon
    http://qt.developpez.com/doc/latest/...gandpaint.html

  10. #10
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    en faite je comprend pas trop ce que je dois mettre dans l'interface.

    Et quel est sont role ?

    Est ce que je dois faire une seul interface qui controle toute la fenetre principale, ou dois-je faire une interface pour la barre de menu une autre pour la barre de status, et encore une pour créer de nouveau dock ?

    C'est un peu confus. Mais merci pour l'exemple, ça à l'air un peu plus concret comme ça.

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    J'ai du mal à comprendre ce que tu veut faire....
    Ils sont sensé faire quoi les dock???

  12. #12
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    Par exemple un exploreur de fichier.

    J'ai fais un Dock qui contient un QTreeView , avec un QDirModel dedans. ça marche nickel. J'en ai fais un autre qui liste les document ouverts dans l'appli nickel.

    Mais je a chaque fois que j'ajoute un dock je dois reprendre le code source de l'appli et recompiler. Aussi je souhaitais faire un système de plugin. Pour ne compiler que le dock que j'ajoute et aussi permettre au utilisateur de choisir uniquement les plugins avec lesquels ils souhaite travailler.

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Essaie peut être pour commencer de faire un plug-in qui te donne une widget que tu pourra mettre dans un dock.

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 28/06/2011, 15h26
  2. [E2451] Undefined symbol 'att_nombre'
    Par kaizer dans le forum C++
    Réponses: 9
    Dernier message: 22/10/2006, 13h53
  3. problème lors de la compilation : Unsatisfied symbols
    Par la schtroumpfette dans le forum C
    Réponses: 6
    Dernier message: 29/12/2005, 09h52
  4. probleme a la compilation:Undefined symbols
    Par djobanaille dans le forum C++
    Réponses: 3
    Dernier message: 07/12/2005, 15h33
  5. Undefined symbol
    Par tchoimars dans le forum C
    Réponses: 2
    Dernier message: 02/12/2005, 17h28

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