==== Librairies dynamiques avec GCC ==== (Un equivalent des DLL de Windoz)\\ C'est la librairie **libdl** et ses fonctions **dlxxx** qui permettent cela.\\ == Creer une librairie simple: == #include #include #include static int lib_load = 0; unsigned int my_inc( unsigned int *value ) { if ( value ) { (*value)++; return( (*value) ); } return( 0 ); } int my_stat( void ) { return( lib_load ); } void __attribute__ ((constructor)) onload( void ) { lib_load++; } void __attribute__ ((destructor)) onunload( void ) { lib_load--; } Pour compiler: $ gcc -g -Wall -shared -fPIC mylibtest.c -o mylibtest.so == A savoir: == Tout ce qui n'est pas ''static'' sera visible.\\ ''onload'' et ''onunload'' sont juste la pour montrer la possibilite d'executer du code au chargement et déchargement de la lib (mais il paraît que ce n'est pas 'portable')\\ == Démonstration du chargement == #include #include #include int main( int argc, char *argv[] ) { void *hlib; int ( *my_stat )( void ); unsigned int (*my_inc)( unsigned int * ); if ( ! ( hlib=dlopen("./mylibtest.so", RTLD_LAZY ) ) ) { printf("error: %s\n",dlerror()); return EXIT_FAILURE; } if ( ! (my_stat = ((int(*)(void))dlsym(hlib,"my_stat")) ) ) { printf("error: %s\n",dlerror()); return EXIT_FAILURE; } printf("my stat= %d\n",my_stat()); if ( ! (my_inc = ((unsigned int(*)(unsigned int *))dlsym(hlib,"my_inc")) ) ) { printf("error: %s\n",dlerror()); return EXIT_FAILURE; } unsigned int v = 500; printf("v= %u\n",my_inc(&v)); dlclose( hlib ); return( EXIT_SUCCESS ); } Compiler: $ gcc -g -Wall -o mytest mytest.c -ldl A l'execution: $ ./mytest my stat= 1 v= 501 Et voila pour les premiers tests...