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