Bonjour à tous,
Je développe actuellement une librairie en C sous Linux. Cependant souhaitant qu'elle utilise une autre librairie en C++, je me suis dis que la solution la plus simple était de la convertir. Dans ce sens là, ça devrait normalement ne pas trop poser de problème.
Utilisant Autoconf, la solution la plus rapide est de renommer mes fichiers .c en .cc, modifier mes Makefile.am et remplacer mes CFLAGS en CXXFLAGS. Bref, je refais marcher la moulinette, ma librairie se compile en intégralité mais quand j'essaie de compiler le programme test qui l'accompagne, c'est la catastrophe :
Pour info, liblist_list_front est dans la librairie liblist.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 libtool: link: g++ -g -O2 -march=native -O0 -g3 -ggdb3 -pipe -ftracer -fsched2-use-traces -Wl,-O0 -fno-inline -Wall -Wextra -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -Wno-comment -Wswitch-enum -Wswitch-default -Wshadow -Werror -DLOCALEDIR=\"/usr/local/share/locale\" -DDATADIR=\"/usr/local/share/2lgc\" -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -g -O2 -o .libs/codegui codegui-main.o -pthread -L/usr/lib64 ../../lib/.libs/liblibrairie.so -llist -lxml2 -lgtk-3 -lgdk-3 /usr/lib64/libatk-1.0.so /usr/lib64/libgio-2.0.so -lresolv -lz -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lcairo -lpango-1.0 -lfreetype -lfontconfig /usr/lib64/libgobject-2.0.so /usr/lib64/libgmodule-2.0.so -ldl /usr/lib64/libgthread-2.0.so -lpthread /usr/lib64/libglib-2.0.so -lrt /usr/lib64/libumfpack.so /usr/lib64/libcholmod.so /usr/lib64/libmetis.so -lreflapack /usr/lib64/libcolamd.so /usr/lib64/libcamd.so /usr/lib64/libccolamd.so -lblas /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libgfortran.so /usr/lib64/libamd.so -lm -pthread ../../lib/.libs/liblibrairie.so: undefined reference to `liblist_list_front(list*)' ../../lib/.libs/liblibrairie.so: undefined reference to `liblist_list_rear(list*)' ../../lib/.libs/liblibrairie.so: undefined reference to `liblist_list_free_free(void*)'
Voici ci-dessous le résultat de mes recherches (comparaison entre la librairie compilée via gcc et via g++) :
Ce que je constate c'est que les symboles semblent être renommés lorsque la librairie est compilée sous g++. Et mon dernier constat, la commande ldd -u -r liblibrairie.so donne :
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 ldd gcc/lib/.libs/liblibrairie.so |grep list liblist.so.3 => /usr/lib64/liblist.so.3 (0x00007f844cc91000) ldd g++/lib/.libs/liblibrairie.so |grep list liblist.so.3 => /usr/lib64/liblist.so.3 (0x00007f6777c96000) nm gcc/lib/.libs/liblibrairie.so |grep list U g_list_foreach U g_list_free U g_list_last U liblist_list_curr U liblist_list_empty U liblist_list_free U liblist_list_free_free U liblist_list_front U liblist_list_init U liblist_list_insert_after U liblist_list_insert_before U liblist_list_mvfront U liblist_list_mvnext U liblist_list_mvprev U liblist_list_mvrear U liblist_list_rear U liblist_list_remove_curr U liblist_list_remove_front U liblist_list_size nm g++/lib/.libs/liblibrairie.so |grep list U _Z17liblist_list_currP4list U _Z17liblist_list_freeP4listPFvPvE U _Z17liblist_list_initv U _Z17liblist_list_rearP4list U _Z17liblist_list_sizeP4list U _Z18liblist_list_emptyP4list U _Z18liblist_list_frontP4list U _Z19liblist_list_mvnextP4list U _Z19liblist_list_mvprevP4list U _Z19liblist_list_mvrearP4list U _Z20liblist_list_mvfrontP4list U _Z22liblist_list_free_freePv U _Z24liblist_list_remove_currP4list U _Z25liblist_list_insert_afterP4listPvm U _Z25liblist_list_remove_frontP4list U _Z26liblist_list_insert_beforeP4listPvm U g_list_foreach U g_list_free U g_list_last
En conclusion, même si la compilation de la librairie semble avoir marché sans problème, je constate qu'il y a de grosses différences "sous le capot" de la nouvelle librairie. Est-ce que quelqu'un voit ce qu'il se passe ?!? N'hésitez pas à me demander d'autres informations si besoin.
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 ldd -u -r gcc/lib/.libs/liblibrairie.so Unused direct dependencies: /lib64/libpthread.so.0 ldd -u -r g++/lib/.libs/liblibrairie.so 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z22liblist_list_free_freePv (continued) undefined symbol: _Z22liblist_list_free_freePv (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z18liblist_list_frontP4list (continued) undefined symbol: _Z18liblist_list_frontP4list (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z17liblist_list_rearP4list (continued) undefined symbol: _Z17liblist_list_rearP4list (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z17liblist_list_freeP4listPFvPvE (continued) undefined symbol: _Z17liblist_list_freeP4listPFvPvE (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z19liblist_list_mvrearP4list (continued) undefined symbol: _Z19liblist_list_mvrearP4list (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z24liblist_list_remove_currP4list (continued) undefined symbol: _Z24liblist_list_remove_currP4list (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z17liblist_list_sizeP4list (continued) undefined symbol: _Z17liblist_list_sizeP4list (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z17liblist_list_currP4list (continued) undefined symbol: _Z17liblist_list_currP4list (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z26liblist_list_insert_beforeP4listPvm (continued) undefined symbol: _Z26liblist_list_insert_beforeP4listPvm (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z17liblist_list_initv (continued) undefined symbol: _Z17liblist_list_initv (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z19liblist_list_mvprevP4list (continued) undefined symbol: _Z19liblist_list_mvprevP4list (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z25liblist_list_remove_frontP4list (continued) undefined symbol: _Z25liblist_list_remove_frontP4list (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z19liblist_list_mvnextP4list (continued) undefined symbol: _Z19liblist_list_mvnextP4list (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z25liblist_list_insert_afterP4listPvm (continued) undefined symbol: _Z25liblist_list_insert_afterP4listPvm (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z20liblist_list_mvfrontP4list (continued) undefined symbol: _Z20liblist_list_mvfrontP4list (g++/lib/.libs/liblibrairie.so) 1059: g++/lib/.libs/liblibrairie.so: error: symbol lookup error: undefined symbol: _Z18liblist_list_emptyP4list (continued) undefined symbol: _Z18liblist_list_emptyP4list (g++/lib/.libs/liblibrairie.so) Unused direct dependencies: /usr/lib64/liblist.so.3 /usr/lib64/libatk-1.0.so.0 /usr/lib64/libgio-2.0.so.0 /lib64/libresolv.so.2 /lib64/libz.so.1 /usr/lib64/libpangoft2-1.0.so.0 /usr/lib64/libpangocairo-1.0.so.0 /usr/lib64/libgdk_pixbuf-2.0.so.0 /usr/lib64/libcairo-gobject.so.2 /usr/lib64/libcairo.so.2 /usr/lib64/libpango-1.0.so.0 /usr/lib64/libfreetype.so.6 /usr/lib64/libfontconfig.so.1 /usr/lib64/libgmodule-2.0.so.0 /lib64/libdl.so.2 /usr/lib64/libgthread-2.0.so.0 /lib64/libpthread.so.0 /lib64/librt.so.1 /usr/lib64/libmetis.so.4 /usr/lib64/libreflapack.so /usr/lib64/libcolamd.so.0 /usr/lib64/libcamd.so.0 /usr/lib64/libccolamd.so.0 /usr/lib64/libblas.so /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libgfortran.so.3 /usr/lib64/libamd.so.0 /usr/lib64/libstdc++.so.6
Merci
Partager