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" :
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 );
}
et un fichier "entree.c" :
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);
}
Je compile avec les lignes suivantes:
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
Et à l'exécution, j'obtiens le résultat suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
there
./entree: undefined symbol: itAbandon (core dumped)
Je ne comprends pas l'erreur issue du dlsym. Quelqu'un a-t-il une idée?

Merci par avance pour votre aide.