2010-09-27 7 views
0

J'ai essayé de compiler ADPACK, écrit en C, sur un Mac Intel exécutant OX 10.6.4. J'ai l'erreur suivante de la commande make.gcc Erreur: "Inputtools.c: 85: erreur: types conflictuels pour 'strcasestr'"

gcc -I/usr/local/include -I/home/ozaki/include -c adpack.c 
adpack.c: In function ‘main’: 
adpack.c:223: warning: incompatible implicit declaration of built-in function ‘strlen’ 
gcc -I/usr/local/include -I/home/ozaki/include -c Inputtools.c 
Inputtools.c:85: error: conflicting types for ‘strcasestr’ 
/usr/include/string.h:88: error: previous declaration of ‘strcasestr’ was here 
Inputtools.c: In function ‘strcasestr’: 
Inputtools.c:96: warning: cast from pointer to integer of different size 
Inputtools.c:96: warning: cast from pointer to integer of different size 
Inputtools.c: In function ‘input_cmpstring’: 
Inputtools.c:124: warning: format ‘%d’ expects type ‘int’, but argument 2 has type  ‘size_t’ 
Inputtools.c:124: warning: format ‘%d’ expects type ‘int’, but argument 3 has type  ‘size_t’ 
make: *** [Inputtools.o] Error 1 

J'ai essayé le refondre size_t comme variable entière, comme je crois comprendre que size_t à peu près Stocke un int typées, mais le casting n'a pas fonctionné. Quelqu'un at-il déjà rencontré une telle erreur? Devrais-je essayer d'utiliser une version différente de gcc?

Merci. Édité. strcasestr est définie sur la ligne 85 en tant que: char * strcasestr statique (char * ch1, ch2 const char *)

Il est défini en tant que string.h char * strcasestr (const char *, const char *);

+6

Les points de titre à la mauvaise erreur. L'erreur réelle qui arrête le compilateur est 'error: types conflictuels pour 'strcasestr'. – kennytm

+0

Pourriez-vous nous montrer ce que Inputtools.c est autour des lignes 85, 96 et 124? Sinon, nous devinons. –

+2

Comme KennyTM dit que l'erreur est dans 'strcasestr'. Cette fonction est une extension fournie par votre compilateur (non définie par le standard) et vous définissez ** un autre ** avec le même nom. Changez le nom de votre fonction ou appelez le compilateur en mode Standard. – pmg

Répondre

3

Utiliser le modificateur %z, si disponible, par exemple,

printf("%zu\n", sizeof(foo)); 

Voir: How can one print a size_t variable portably using the printf family? (double possible) pour plus de détails

+0

Cela a été essayé. Je pense que KennyTM a raison. Le vrai problème est la définition contradictoire de strcasestr. – notElon

+0

@notElon: C'est vrai, mais vous devriez aussi corriger ce bug. – caf