Salut
j'ai un ptit problème avec le "-pedantic"
j'essaye de n'avoir aucun warning à la compilation (histoire de faire propre ) mais la y'en a un qui me résiste
le code déjà :
il s'agit d'édition de liens dynamique, tout ce qu'il y a de plus banal en somme
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <dlfcn.h>
- int main(int argc, char **argv)
- {
- //le pointeur vers la librairie(ou le module) chargee
- void *handle = NULL;
- //le pointeur vers la fonction coucou dans le module
- //la déclaration doit être cohérente avec celle chargée dans le module
- char *(*coucou)(void);
- char *erreur = NULL;
- if(argc == 1){
- fprintf(stdout," Usage : %s [libcoucou1.so|libcoucou2.so]\n",argv[0]);
- exit(0);
- }
- //on tente d'ouvrir la librairie demandee
- handle = dlopen(argv[1], RTLD_LAZY);
- //en cas d'echec...
- if(handle == NULL){
- fprintf(stderr,"%s\n",dlerror());
- exit(1);
- }
- //on tente de resoudre le symbole coucou
- //en d'autres termes on recherche la fonction coucou dans la lib ouverte
- coucou = dlsym(handle,"coucou" );
-
- //en cas d'erreur...
- if((erreur = dlerror()) != NULL){
- fprintf(stderr,"%s\n",erreur);
- exit(1);
- }
- //on appelle la fonction coucou offerte par la lib
- printf("%s\n",(*coucou)());
- //on referme la lib
- dlclose(handle);
- return 0;
- }
|
la compilation et son warning :
gcc -Wall -pedantic -std=c99 test.c -o test -ldl
test.c: In function `main':
test.c:30: attention : ISO C interdit affectation entre pointeur de fonction et « void * »
|
c'est donc le "coucou = dlsym(handle,"coucou" );" qui pose problème, et j'arrive pas à trouvé le castage ou l'astuce pour faire disparaître proprement ce warning
vous auriez une idée ?
Message édité par Deadog le 31-03-2005 à 12:48:24