Bonjour à toutes et à tous,
J'essaie actuellement de construire une bibliothèque partagée que j'aimerais charger dynamiquement. L'idée à terme est d'intégrer un système de plug-ins dans un projet de plus grande ampleur. j'ai actuellement un fichier "essai.c" :
et un fichier "entree.c" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #include <stdio.h> int it ( int i_arg ) { return ( i_arg * 2 ); }
Je compile avec les lignes suivantes:
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 #include <stdio.h> #include <stdlib.h> #include <dlfcn.h> typedef void* handle_t; void abort_if_fail ( int i_condition , const char* pch_message ) { if ( !( i_condition ) ) { printf ( "there\n" ); fputs ( pch_message , stderr ); abort ( ); } else { } } int main ( int i_argc , char** ppch_argv ) { handle_t p_handle = NULL; char * pch_error = NULL; int ( *doublee )( int ); void ( *try )(); p_handle = dlopen ( "libmystuff.so.1.0.1" , RTLD_NOW ); abort_if_fail ( ( p_handle == NULL ) , dlerror ( ) ); doublee = dlsym ( p_handle , "it" ); pch_error = dlerror ( ); abort_if_fail ( ( pch_error == NULL ) , pch_error ); printf ("%f\n", (*doublee)(3)); dlclose(p_handle); }
Et à l'exécution, j'obtiens le résultat suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 gcc -c -Wall -fPIC essai.c gcc -shared -Wl,-export-dynamic,-soname,libmystuff.so.1 -o libmystuff.so.1.0.1 essai.o -lc gcc -rdynamic -o entree entree.c -ldl
Je ne comprends pas l'erreur issue du dlsym. Quelqu'un a-t-il une idée?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 there ./entree: undefined symbol: itAbandon (core dumped)
Merci par avance pour votre aide.
Partager