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

Discussion :

Création de ma première bibliothèque

  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut Création de ma première bibliothèque
    Bonjour,
    je ne sais pas si je suis au bon endroit, mais je fais confiance au admin pour me rediriger si besoin.

    Voila je souhaite créer et utiliser ma première librairie. Je ne suis pas du tout familière avec l'utilisation des librairies d'où ma présence.

    Je commence par préciser que je travail sous l’environnement Qt Creator et que j'utilise déjà Qt (mais je n'ai jamais rien paramétré de ce coté là).

    J'ai déjà créer mon projet de librairie, mis mon code dedans avec la classe que je souhaite rendre instanciable par les programmes utilisant cette lib.

    pour vous faire simple voici quelques morceau de code :

    Tout d'abord le .pro de mon projet de lib :
    Code Qt-pro : 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
    #-------------------------------------------------
    #
    # Project created by QtCreator 2018-10-26T09:39:31
    #
    #-------------------------------------------------
     
    QT       -= gui
    QT       += network
     
    TARGET = MLK
    TEMPLATE = lib
    CONFIG += staticlib
     
    DEFINES += MLK_LIBRARY
     
    # The following define makes your compiler emit warnings if you use
    # any feature of Qt which has been marked as deprecated (the exact warnings
    # depend on your compiler). Please consult the documentation of the
    # deprecated API in order to know how to port your code away from it.
    DEFINES += QT_DEPRECATED_WARNINGS
     
    # You can also make your code fail to compile if you use deprecated APIs.
    # In order to do so, uncomment the following line.
    # You can also select to disable deprecated APIs only up to a certain version of Qt.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
     
    SOURCES += \
            classeaccessibleexterieur.cpp \
        classe1.cpp \
        classe2.cpp \
        classe3.cpp \
        classe4.cpp
     
    HEADERS += \
            classeaccessibleexterieur.h \
            mlk_global.h \
        classe1.h \
        classe2.h \
        classe3.h \
        classe4.h \
        classe5.h
     
    unix {
        target.path = /usr/lib
        INSTALLS += target
    }

    voici le fichier mlk_global.h qui s'est autocréé lors de la création du projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #ifndef MLK_GLOBAL_H
    #define MLK_GLOBAL_H
     
    #include <QtCore/qglobal.h>
     
    #if defined(MLK_LIBRARY)
    #  define MLKSHARED_EXPORT Q_DECL_EXPORT
    #else
    #  define MLKSHARED_EXPORT Q_DECL_IMPORT
    #endif
     
    #endif // MLK_GLOBAL_H
    et voici ma classe à rendre accessible vers l’extérieur:
    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
    #ifndef CLASSE_ACCESSIBLE_EXTERIEUR_H
    #define CLASSE_ACCESSIBLE_EXTERIEUR_H
     
    #include "mlk_global.h"
     
    #include <QVector>
    #include <QFileInfo>
    #include "classe1.h"
    #include "classe2.h"
    #include "classe3.h"
    #include "classe4.h"
     
    class MLKSHARED_EXPORT ClasseAccessibleExterieur
     
    {
    private :
        QVector<Classe1> instanceClasse1;
        QVector<Classe2> instanceClasse2;
        QVector<Classe3> instanceClasse3;
        QVector<Classe4> instanceClasse4;
     
     
    public:
        ClasseAccessibleExterieur();
        ~ClasseAccessibleExterieur();
     
        bool loadFile(QFileInfo info);
        bool saveFile(QFileInfo file);
     
        QString  classe1ToString(int indice);
        int     getSizeOf_Classe1();
     
        QString  classe2ToString(int indice);
        int     getSizeOf_Classe2();
     
        QString  classe3ToString(int indice);
        int     getSizeOf_Classe3();
     
        QString  classe4ToString(int indice);
        int     getSizeOf_Classe4();
    };
     
    #endif // CLASSE_ACCESSIBLE_EXTERIEUR_H
    Bon jusque là faite moi savoir si il manque des choses importantes.

    J'ai donc maintenant souhaité inclure mon fichier "mlk.lib" dans un autre projet (toujours sous QtCreator)

    J'ai donc fait ceci dans mon fichier monSoft.pro

    Code Qt-pro : 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
    #-------------------------------------------------
    #
    # Project created by QtCreator 2018-10-22T15:14:41
    #
    #-------------------------------------------------
     
    QT       += core gui
     
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
     
    TARGET = MonSoft
    TEMPLATE = app
     
    # The following define makes your compiler emit warnings if you use
    # any feature of Qt which has been marked as deprecated (the exact warnings
    # depend on your compiler). Please consult the documentation of the
    # deprecated API in order to know how to port your code away from it.
    DEFINES += QT_DEPRECATED_WARNINGS
     
     
     
    # You can also make your code fail to compile if you use deprecated APIs.
    # In order to do so, uncomment the following line.
    # You can also select to disable deprecated APIs only up to a certain version of Qt.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
     
    CONFIG += c++11
     
     
    SOURCES += \
            main.cpp \
            mainwindow.cpp \
     
    HEADERS += \
            mainwindow.h \
     
    FORMS += \
            mainwindow.ui
     
     
     
    # Default rules for deployment.
    qnx: target.path = /tmp/$${TARGET}/bin
    else: unix:!android: target.path = /opt/$${TARGET}/bin
    !isEmpty(target.path): INSTALLS += target
     
    DISTFILES +=
     
     
    unix|win32: LIBS += -L$$PWD/./ -lMLK
     
    INCLUDEPATH += $$PWD/.
    DEPENDPATH += $$PWD/.
     
    win32:!win32-g++: PRE_TARGETDEPS += $$PWD/./MLK.lib
    else:unix|win32-g++: PRE_TARGETDEPS += $$PWD/./libMLK.a

    Et j'ai voulu utiliser dans ma classe MainWindow ma classe provenant de ma dll :
    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
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
     
    #include <QMainWindow>
     
    #pragma comment(lib, "MLK.lib")
     
     
    namespace Ui {
    class MainWindow;
    }
     
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
     
     
    protected :
        ClasseAccessibleExterieur maClass; // et là le compilateur me dit qu'il ne connait pas ClasseAccessibleExterieur
     
    private:
        Ui::MainWindow *ui;
    };
     
    #endif // MAINWINDOW_H
    et donc là mon compilateur me dit qu'il ne connait pas ClasseAccessibleExterieur.

    donc j'imagine qu'il y a un fichier include à fournir et à inclure avant mais lequel? les faut-il tous ? sachant que mon fichier classeaccessinleexterieur.h inclus les autres?



    Suis-je sur la bonne voie? ou suis-je complètement à coté de la plaque sur la manière de créer une lib?


    PS :

    Bon il semblerait qu'inclure les fichier .h ne suffise pas :

    car lors de la compilation de mon logiciel j'obtiens tout une succession d'erreur comme celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mainwindow.obj:-1: erreur : LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl ClasseAccessibleExterieur::ClasseAccessibleExterieur(void)" (__imp_??0ClasseAccessibleExterieur@@QEAA@XZ) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QEAA@PEAVQWi
    et ceux pour toute les fonctions de ma classe ClasseAccessibleExterieur

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Par défaut
    Bonjour,petite remarque,le pragma comment l.6 , il me semble que c'est uniquement avec le compilateur microsoft...et ta librairie et le header sont bien dans le repertoire du projet monsoft ?

  3. #3
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut
    Bonjour,
    tout d'abord merci de m'avoir répondu.

    petite remarque,le pragma comment l.6 , il me semble que c'est uniquement avec le compilateur microsoft
    Je compile effectivement avec le compilateur msvc.

    et ta librairie et le header sont bien dans le repertoire du projet monsoft
    Il ne sont pas dans le répertoire du projet mon soft mais mon projet de librairie est dans un sous répertoire "MLK" de mon soft.
    J'ai modifié depuis mon .pro de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INCLUDEPATH += $$PWD/MLK/Includes
    LIBS += -L$$PWD/MLK/Build/Release/release/ -lMLK
    cela ne me semble pas déconnant, non?

  4. #4
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut
    Bon il semble que j'ai trouvé :

    sur le lien suivant
    https://het.as.utexas.edu/HET/Softwa...edlibrary.html

    il est dit qu'il faut ajouter au .pro de monSoft le DEFINE défini dans mlk_global.hh soit :
    En espérant que ça puisse aider d'autres personnes

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/06/2013, 16h57
  2. Problème de création de la première base des données
    Par gentil2005 dans le forum Odoo (ex-OpenERP)
    Réponses: 2
    Dernier message: 18/12/2012, 16h20
  3. Réponses: 4
    Dernier message: 01/09/2009, 10h32

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