Bonjour,
Je suis débutant sous visual C++,
J'ai créé un projet constitué d'un programme principal qui génère un exécutable et plusieurs librairies statiques.
Je voudrais pouvoir générer une seule DLL à partir des librairies statiques existantes.
Voici un exemple basique pour illustrer mon problème:
mon projet principal est Test constitué de main.c qui génère un exécutable:
Maintenant, je veux que les printf soient gérés par deux librairies statiques différentes, mon code devient
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 #include <stdio.h> #include <windows.h> int main () { printf ("TEST 1\n"); Sleep (2000); printf ("TEST 2\n"); Sleep (2000); return 0; }
Les fonctions display effectuent un printf :
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 <stdio.h> #include <windows.h> #include "lib1_static.h" #include "lib2_static.h" int main () { display1 ("TEST 1\n"); Sleep (2000); display2 ("TEST 2\n"); Sleep (2000); return 0; }
Mon projet principal sous Visual a pour dépendances les deux librairies statiques.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void display1 (char *s) { printf ("TESTLIB1_STATIC : %s\n", s); }
Au link, tout se passe bien, mon exécutable est généré et mes deux printfs se déroulent sans problème.
Notons que si mes deux librairies sont des DLLs, ça fonctionne aussi bien, en rajoutant les __declspec(dllexport) afin d'exporter les symboles.
En fait, j'aimerais que mon projet principal ne possède qu'une seule dépendance, une seule DLL.
Je pourrais bien sur, mettre en commun tout mon code dans une même dll, mais ça ne m'arrange pas trop.
Mon projet principal Test dépend désormais seulement de la librairie dynamique lib2_dynamic, et lib2_dynamic a maintenant pour dépendance lib1_static ou lib1_dynamic.
La compilation de lib1_(static/dynamic) se passe bien ainsi que celle de lib2_dynamic, ensuite, au moment du link avec le projet principal Test, j'obtiens l'erreur suivante:
Lorsque je fais une analyse des symboles exportés dans lib2_dynamic.lib, _display2 est bien présent, mais, en effet, _display1 est absent, et pourtant, la lib1 est une dépendance de la lib2.main.obj : error LNK2019: symbole externe non résolu _display1 référencé dans la fonction _main.
Est ce qu'il est possible de constituer une DLL à partir de plusieurs librairies?
Merci d'avance.
Partager