Bonjour,
J'essaie de compiler une bibliothèque partagée sous Linux qui contiendrait du code C et du code C++. J'ai compilé les fichiers C avec gcc (gcc -c -fPIC) et les fichiers C++ avec g++ (g++ -c -fPIC). J'ai lié le tout avec g++ (g++ -shared -Wl,-soname,libtool.so.1).
La bibliothèque comprend bien le symbole de ces fonctions. Le résultat de nm sur cette bibliothèque donne :
0000000000245840 V _ZTI19GntringCommunicator
000000000003a3a0 V _ZTS19GntringCommunicator
00000000002457c0 V _ZTV19GntringCommunicator
0000000000039547 T connect_ring
00000000000394e2 T disconnect_ring
0000000000039361 T init_ring
0000000000039958 T notify_ring_evtchn
00000000000396c2 T release_ring
0000000000039318 T ring_get_gref
00000000000392cf T ring_get_mfns
0000000000039286 T ring_get_pfns
Les premières fonctions avec _ZTI sont des fonctions C++, celles sont sans préfixes (connect_ring ...) sont les fonctions C.
Lorsque j'essaie de compiler une application avec gcc ou g++ en utilisant cette bibliothèque, j'obtient des undefined references pour les fonctions C.
Suis-je obligé de compiler les fichiers C avec g++ et des "extern C" ou connaissez-vous un moyen plus simple pour utiliser cette bibliothèque mixte ?
Merci pour votre aide.
Partager