Multiple definition of
Résolu
yoano
-
yoano -
yoano -
Bonjour
J'ai creer un programme sous C contenant :
un fichiersource.c
fonction.c
fonction.h
j'ai ensuite compiler aucun problème, j'ai voulu faire l'édition de lien et la petit message d'erreur :
factcholesky.o: In function `factcholesky':
factcholesky.c:(.text+0x0): multiple definition of `factcholesky'
Maincholesky.o:Maincholesky.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
=> voila mon fichiersource.c :
#include <stdio.h>
#include <stdlib.h>
#include"LectureMatrice.h"
#include"AffichageMatrice.h"
#include "factcholesky.c"
int main()
{
int af;
char NomMatrice,NomMatrice2;
MATfloat A;
MATfloat L;
char nomfich[256];
printf("Entrez le nom du fichier :");
scanf("%s",&nomfich[0]);
A = LectureMATfloat(nomfich,&NomMatrice);
NomMatrice = 'A';
af=AffichageMATfloat(NomMatrice,A);
NomMatrice2='L';
L=factcholesky(A,NomMatrice);
AffichageMATfloat(NomMatrice2,L);
return 0;
}
=> et mon fichier fonction.c :
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "TypedefMatrice.h"
#include "AllocationMatrice.h"
#include "AffichageMatrice.h"
#include "factcholesky.h"
MATfloat factcholesky (MATfloat A, char NomMatrice)
{
MATfloat L; /* L la matrice triangulaire inférieure */
int i,j,k;
/*int af;*/
int err=0; /* compteur si présence d'une erreur */
float x,y,z;
/*char NomMatrice='A';
af=AffichageMATfloat(NomMatrice,A);*/
/* Allocation de la matrice L en mémoire*/
L=AllocationMATfloat(A.NbrLig,A.NbrCol); /* On a présence d'une matrice définie carrée */
/* => TEST SUR MATRICE A */
/* Vérification que la matrice est carré */
if(A.NbrLig-A.NbrCol!=0.0) /* if(A.NbrLig!=A.NbrCol)*/
{
printf("ERREUR : la matrice n'est pas carrée\n"); err=1;exit(-1);
}
/* => CALCUL DE LA MATRICE, FACTORISATION DE CHOLESKY */
if (err==0) /* Réalisation d'un test afin de n'avoir aucune erreur enregistrée */
{
/* Premier coefficient calculé */
if(A.Mat[0][0]>0.0) /* Le 1er coefficient doit être positif*/
{
L.Mat[0][0]=sqrt(A.Mat[0][0]);
}
else {/*erreur*/err=1;}
/* Premiers coefficient de chaque ligne calculés */
for (i=1;i<A.NbrLig;i++)
{
if (L.Mat[0][0]!=0.0) /* Le 1er coefficient doit être non nul*/
{
L.Mat[i][0]=A.Mat[i][0]/L.Mat[0][0];
}
else{/*erreur*/err=1;}
}
/* Le reste des coefficients est calculé */
for(i=1;i<A.NbrLig;i++)
{
for(j=1;j<=i;j++)
{
/* Le coefficient diagonal est calculé */
if(i==j)
{
/* La somme des coefficients(²) est calculée dans un même temps à part */
for(k=0,x=0;k<i;k++)
{
x+=L.Mat[i][k]*L.Mat[i][k];
}
z=A.Mat[i][j]-x;
if (z>0) /* La bonne éxécution de la racine est testée */
{
L.Mat[i][j]=sqrt(z);
}
else
{/*erreur*/err=1;}
}
/* Le calcul des autres coefficients est réalisé */
else
{
/* Le calcul de la somme est éffectué à part */
for(k=0,y=0;k<j;k++)
{
y+=L.Mat[i][k]*L.Mat[j][k];
}
if(L.Mat[j][j]!=0) /* La bonne exécution de la division est testée*/
{
L.Mat[i][j]=(A.Mat[i][j]-y)/(L.Mat[j][j]);
}
else
{/*erreur*/ err++;}
}
}
}
}
if (err>=1) /* La présence d'une erreur renvoi, un message d'erreur */
{
printf("ERREUR : La factorisation de Cholesky présente une erreur \n");
}
return (L);
}
=> et fonction.h :
/*Fonction de décompositon selon la factorisation de Cholesky*/
MATfloat factcholesky(MATfloat A,char NomMatrice);
Voila si quelqu'un pouvez m'éclairer dans mon sombre chemin de C.
Je suis sous ubuntu avec le compilateur gcc.
Merci par avance
J'ai creer un programme sous C contenant :
un fichiersource.c
fonction.c
fonction.h
j'ai ensuite compiler aucun problème, j'ai voulu faire l'édition de lien et la petit message d'erreur :
factcholesky.o: In function `factcholesky':
factcholesky.c:(.text+0x0): multiple definition of `factcholesky'
Maincholesky.o:Maincholesky.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
=> voila mon fichiersource.c :
#include <stdio.h>
#include <stdlib.h>
#include"LectureMatrice.h"
#include"AffichageMatrice.h"
#include "factcholesky.c"
int main()
{
int af;
char NomMatrice,NomMatrice2;
MATfloat A;
MATfloat L;
char nomfich[256];
printf("Entrez le nom du fichier :");
scanf("%s",&nomfich[0]);
A = LectureMATfloat(nomfich,&NomMatrice);
NomMatrice = 'A';
af=AffichageMATfloat(NomMatrice,A);
NomMatrice2='L';
L=factcholesky(A,NomMatrice);
AffichageMATfloat(NomMatrice2,L);
return 0;
}
=> et mon fichier fonction.c :
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "TypedefMatrice.h"
#include "AllocationMatrice.h"
#include "AffichageMatrice.h"
#include "factcholesky.h"
MATfloat factcholesky (MATfloat A, char NomMatrice)
{
MATfloat L; /* L la matrice triangulaire inférieure */
int i,j,k;
/*int af;*/
int err=0; /* compteur si présence d'une erreur */
float x,y,z;
/*char NomMatrice='A';
af=AffichageMATfloat(NomMatrice,A);*/
/* Allocation de la matrice L en mémoire*/
L=AllocationMATfloat(A.NbrLig,A.NbrCol); /* On a présence d'une matrice définie carrée */
/* => TEST SUR MATRICE A */
/* Vérification que la matrice est carré */
if(A.NbrLig-A.NbrCol!=0.0) /* if(A.NbrLig!=A.NbrCol)*/
{
printf("ERREUR : la matrice n'est pas carrée\n"); err=1;exit(-1);
}
/* => CALCUL DE LA MATRICE, FACTORISATION DE CHOLESKY */
if (err==0) /* Réalisation d'un test afin de n'avoir aucune erreur enregistrée */
{
/* Premier coefficient calculé */
if(A.Mat[0][0]>0.0) /* Le 1er coefficient doit être positif*/
{
L.Mat[0][0]=sqrt(A.Mat[0][0]);
}
else {/*erreur*/err=1;}
/* Premiers coefficient de chaque ligne calculés */
for (i=1;i<A.NbrLig;i++)
{
if (L.Mat[0][0]!=0.0) /* Le 1er coefficient doit être non nul*/
{
L.Mat[i][0]=A.Mat[i][0]/L.Mat[0][0];
}
else{/*erreur*/err=1;}
}
/* Le reste des coefficients est calculé */
for(i=1;i<A.NbrLig;i++)
{
for(j=1;j<=i;j++)
{
/* Le coefficient diagonal est calculé */
if(i==j)
{
/* La somme des coefficients(²) est calculée dans un même temps à part */
for(k=0,x=0;k<i;k++)
{
x+=L.Mat[i][k]*L.Mat[i][k];
}
z=A.Mat[i][j]-x;
if (z>0) /* La bonne éxécution de la racine est testée */
{
L.Mat[i][j]=sqrt(z);
}
else
{/*erreur*/err=1;}
}
/* Le calcul des autres coefficients est réalisé */
else
{
/* Le calcul de la somme est éffectué à part */
for(k=0,y=0;k<j;k++)
{
y+=L.Mat[i][k]*L.Mat[j][k];
}
if(L.Mat[j][j]!=0) /* La bonne exécution de la division est testée*/
{
L.Mat[i][j]=(A.Mat[i][j]-y)/(L.Mat[j][j]);
}
else
{/*erreur*/ err++;}
}
}
}
}
if (err>=1) /* La présence d'une erreur renvoi, un message d'erreur */
{
printf("ERREUR : La factorisation de Cholesky présente une erreur \n");
}
return (L);
}
=> et fonction.h :
/*Fonction de décompositon selon la factorisation de Cholesky*/
MATfloat factcholesky(MATfloat A,char NomMatrice);
Voila si quelqu'un pouvez m'éclairer dans mon sombre chemin de C.
Je suis sous ubuntu avec le compilateur gcc.
Merci par avance
A voir également:
- Multiple definition of c++
- Paris multiple 2/6 explication ✓ - Forum Loisirs / Divertissements
- Input signal out of range ✓ - Forum Matériel & Système
- Paris multiple 2/5 explication ✓ - Forum Loisirs / Divertissements
- Ecran multiple pc - Guide
- Excel cellule choix multiple - Guide