> Tous les forums > Forum Autres langages
 Erreur de compilationSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Premium
  Posté le 30/05/2006 @ 13:56 
Aller en bas de la page 
Petit astucien
Salut, à la compilation d'un programme, j'ai cette erreur : [code] /tmp/ccycgID8.o: dans la fonction « parsing »: parsing.c:(.text+0x22a): référence indéfinie vers « correctIP » collect2: ld a retourné 1 code d'état d'exécution[/code] Je ne comprends pas très bien ou est le problème car dans le fichier parsing.c, j'ai bien mis le .h qui contient la fonction correctIP
Publicité
breizhbugs
 Posté le 30/05/2006 à 14:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
[hello] Code source?
Premium
 Posté le 30/05/2006 à 15:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Salut, voici les différents fichiers En même temps, si tu pouvais également me dire si des améliorations sont à effectuer sur le code, n'hésite pas. Merci d'avance parsing.c [code] #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include "verifIP.h" #define F "fichier" void purge(FILE *fp) { int c; while ((c = fgetc(fp)) != '\ //ici c'est \n ' && c != EOF) { } } void clean (char *s, FILE *fp) { char *p = strchr (s, '\ //ici c'est \n '); if (p != NULL) { *p = 0; } else { purge (fp); } } char **parsing(FILE *fp) { char **tab; int nb = 0 ,size = 5; tab = malloc (size * sizeof * tab); if(tab == NULL) { perror("erreur allocation\n"); exit(1); } if (fp != NULL) { char line[BUFSIZ]; while(fgets(line, sizeof line, fp) != NULL) { clean(line, fp); char *p = strtok(line," "); if (p != NULL) { p = strtok(NULL," "); if (p != NULL) { if(nb == size) { size += 16; tab = realloc(tab, size * sizeof *tab); if (tab == NULL) { perror("erreur allocation\n"); free(tab); tab = NULL; return tab; } } int ip[4]; int n = sscanf(p,"%d.%d.%d.%d",ip,ip+1,ip+2,ip+3); if(n == 4) { tab[nb] = malloc((strlen(p)+1) * sizeof * tab[nb]); if (tab[nb] == NULL) { perror("erreur allocation\n"); free(tab); tab = NULL; return tab; } if(!correctIP(p)) { strcpy(tab[nb],p); nb++; } } } else { printf ("format error\n"); break; } } else { printf ("format error\n"); break; } } fclose (fp), fp = NULL; tab[nb] = NULL; } else { perror (F); } assert (fp == NULL); return tab; } [/code] parsing.h [code] #ifndef H_PARSING #define H_PARSING #include <stdio.h> void purge(FILE *fp); void clean (char *s, FILE *fp); char **parsing(FILE *fp); #endif [/code] verifIP.c [code] #include <stdio.h> #include <stdlib.h> // Si une IP est nulle int ip_null(int ip[4]) { size_t i; for (i = 0; i < 4; i++) { if (ip[i] == 0) { return 0; } } return 1; } // Si une IP égale une autre IP int ip_equal(int ip1[4], int ip2[4]) { size_t i; for (i = 0; i < 4; i++) { if (ip1[i] == ip2[i]) { return 0; } } return 1; } // Si une IP inf une autre IP int ip_inf(int ip1[4], int ip2[4]) { size_t i; for (i = 0; i < 4; i++) { if (ip1[i] > ip2[i]) { return 0; } } return 1; } // Si une IP sup une autre IP int ip_sup(int ip1[4], int ip2[4]) { size_t i; for (i = 0; i < 4; i++) { if (ip1[i] < ip2[i]) { return 0; } } return 1; } //Verifie si une IP est correcte int Verife(int ip[4]) { typedef struct { int deb[4]; int fin[4]; }t_plageIP; static t_plageIP tabPlage[]= { {{10, 0, 0, 0}, {10, 255, 255, 255}}, {{172, 16, 0, 0}, {172, 31, 255, 255}}, {{192, 168, 0, 0}, {192, 168, 255, 255}}, {{224, 0, 0, 0}, {239, 255, 255, 255}}, {{240, 0, 0, 0}, {255, 255, 255, 255}}, {{0, 0, 0, 0}, {0, 0, 0, 0}} }; t_plageIP *ptPlage; // Balayage des plages for (ptPlage=tabPlage; ip_null(ptPlage->deb) != 0; ptPlage++) { if (ip_sup(ip, ptPlage->deb) && ip_inf(ip, ptPlage->fin)) // IP appartient plage interdite return 1; } // IP appartient pas plage interdite return 0; } //Verifie si la chaine est une IP correcte int correctIP(char *chaine){ int *ip = malloc (sizeof * ip * 4); if(ip == NULL) { perror("erreur allocation\n"); return 1; } int n = sscanf(chaine, "%d.%d.%d.%d", ip, ip + 1, ip + 2, ip + 3); if(n != 4) { printf("erreur\n"); free(ip); return 1; } if(!Verife(ip)) { free(ip); return 1; } return 0; } [/code] verifIP.h [code] #ifndef H_VERIFIP #define H_VERIFIP // Si une IP est nulle int ip_null(int ip[4]); // Si une IP égale une autre IP int ip_equal(int ip1[4], int ip2[4]); // Si une IP inf une autre IP int ip_inf(int ip1[4], int ip2[4]); // Si une IP sup une autre IP int ip_sup(int ip1[4], int ip2[4]); //Verifie si une IP est correcte int Verife(int ip[4]); //Verifie si la chaine est une IP correcte int correctIP(char *chaine); #endif [/code] main.c [code] #include <stdio.h> #include <stdlib.h> #include "parsing.h" int main() { FILE *file = fopen("fichier","r"); char **tab; char **pt; tab = parsing(file); if(tab == NULL) { perror("erreur\n"); exit(1); } for(pt = tab; *pt != NULL; pt++) printf("%s\n",*pt); free(tab); tab = NULL; return 0; } [/code] un fichier pour tester [code] 1 122.145.4.3 15.341 ms * 6.454 ms 2 * * * 3 143.213.43.45 14.447 ms 15.199 ms 40.861 ms 4 254.65.34.176 18.966 ms 15.861 ms 16.480 ms 5 176.56.65.134 16.612 ms * 19.449 ms 6 245.45.2.15 20.819 ms 13.349 ms * 7 143.154.154.56 17.262 ms 22.436 ms 18.365 ms 8 * * * 9 * * * 10 176.91.154.178 15.788 ms 18.069 ms 19.986 ms [/code]

Modifié par Premium le 30/05/2006 15:09
breizhbugs
 Posté le 30/05/2006 à 16:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Il manque le makefile.
Premium
 Posté le 30/05/2006 à 16:40 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
breizhbugs a écrit :
Il manque le makefile.
Je n'ai pas fait de Makefile. En faite, c'était un problème tout simple, je n'avais pas compilé en ajoutant les fichiers verifIP.c et verifIP.h [idee] Le problème est résolu une fois que j'ajoute ces 2 fichiers [bigsmile]
breizhbugs
 Posté le 30/05/2006 à 17:07 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Premium a écrit : En faite, c'était un problème tout simple, je n'avais pas compilé en ajoutant les fichiers verifIP.c et verifIP.h [idee]
C'est ce que je voulais voir dans le makefile. Fais toi un makefile, c'est plus "classe" (et pis si les profs veulent compiler ton programme, ils ne chercheront pas autre chose!)
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
149,70 €Montre connectée Samsung Galaxy Watch Active 2 44 mm à 149,70 €
Valable jusqu'au 24 Juin

Cdiscount fait une belle promotion la montre connectée Samsung Galaxy Watch Active 2 44 mm 149,70 €. On la trouve ailleurs autour de 180 €. Créée pour un contrôle rapide et sans effort, la montre intelligente SAMSUNG Galaxy Watch Active2 est élégante, étanche et confortable à porter avec entre autres un écran Super AMOLED Full Colour, un GPS, des conseils d'entraînement de pointe et une batterie performante pour vous aider à parcourir votre chemin vers le bien-être.


> Voir l'offre
56,99 €SSD WD Blue SN550 500 Go (NMVe M.2, 2400 Mo/s) à 56,99 €
Valable jusqu'au 26 Juin

Amazon fait une promotion sur le SSD WD Blue SN550 500 Go (NMVe M.2) qui passe à 56,99 € livré alors qu'on le trouve ailleurs à partir de 75 €. Ce SSD utilise une interface M.2 NVMe PCIe Gen3 x 4 pour une connexion simple et des performances exceptionnelles : jusqu’à 2 400 Mo/s en lecture séquentielle et jusqu’à 1 950 Mo/s en écriture séquentielle. Le SSD est doté de la technologie 3D TLC NAND haute densité offrant une endurance d’écriture durable et assorti d’une garantie de cinq ans. 


> Voir l'offre
19,49 €Clé USB Sandisk Ultra 128 Go à double connectique USB 3.1 Type A et C à 19,49 €
Valable jusqu'au 26 Juin

Amazon fait une promotion sur la clé USB Sandisk Ultra 128 Go à double connectique USB 3.1 Type A et C qui passe à 19,49 €. Cette clé USB  dispose d'un connecteur réversible USB Type C et d'un connecteur classique de type A. Grâce à elle, transférez en toute simplicité et rapidement (jusqu'à 150 Mo/s) vos fichiers entre vos smartphones, tablettes et ordinateurs. On la trouve ailleurs à plus de 40 €.


> Voir l'offre

Sujets relatifs
Erreur à la compilation à cause des headers
[C] Erreur de compilation
erreur de compilation
erreur de compilation
Arduino compilation
Erreur de script de internet explorer !
Code erreur Windows Live Mail
Erreur sur C++
erreur '3265'
Erreur java script
Plus de sujets relatifs à Erreur de compilation
 > Tous les forums > Forum Autres langages