C++ : pb avec une fonction extern C

nanch07 Messages postés 2 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 28 janvier 2003 - 27 janv. 2003 à 22:02
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 - 28 janv. 2003 à 22:42
J'expose tout, voilà: dans une de mes classes je fais appel à une fonction externe en C ( de numerical recipes in C). Mais j'ai également besoin de cette fonction dans une autre classe.

extern "C" {
// fonctions de numerical recipes utilisees (a enlever)
void linbcg(unsigned long n, double b[], double x[], int itol, double tol, int itmax, int *iter, double *err);

double *sa=NULL;
unsigned long *ija=NULL;
}

vtkParamDeform.obj : error LNK2005: _ija already defined in TestParamDeform.obj
vtkParamDeform.obj : error LNK2005: _sa already defined in TestParamDeform.obj

J'aurai donc besoin d aide a ce niveau la...
Merci d avance

3 réponses

cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
27 janv. 2003 à 23:30
extern "C" ou pas, il ne faut inclure qu'une seule fois l'IMPLEMENTATION (le corps) des fonctions par application (pour tout le programme)... sinon le LINKEUR se fache

Il est nécessaire par contre d'inclur dans chaque unité de compilation (.c et .cpp) les DECLARATIONs des fonctions .
Met les dans un .h et n'inclus que ça dans tes .cpp et .c ... sinon le compilateur se rebiffe
0
nanch07 Messages postés 2 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 28 janvier 2003
28 janv. 2003 à 10:53
Premièrement je tiens a te remericer, j ai donc essaye de faire un header avec seulement la partie extern C, met j ai toujours un pb au moment du linkage avec cette fonction en C...
"error LNK2001: unresolved external symbol _linbcg"
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
28 janv. 2003 à 22:42
Désolé pour cette aide pas vraiment ciblée (je t'ai parlé de fonctions alors que le problème se situe vraissemblablement du coté des variables
mais je vois que tu avances... cool!

rappel :
un 'unresolved reference' signifie que le linkeur n'a pas trouvé le corps de ta fonction ou bien une definition de VARIABLE.
Pour une fonction, tu peux lui fournir dans un .cpp de ton programme ou bien linker avec le .LIB qui contient son implémentation.
Pour une variable, il faut DEFINIR une et une seule fois la variable dans le programme et seulement la DECLARER par la directive 'extern' dans les autres unités de compilation.
(le mot clef 'extern' seul , comme modificateur de type )

ici, apparemment , vu les premiers messages d'erreurs que tu a montré (> > > vtkParamDeform.obj : error LNK2005: _ija already defined in TestParamDeform.obj
> > > vtkParamDeform.obj : error LNK2005: _sa already defined in TestParamDeform.obj
il s'agit plutôt de variables
0
Rejoignez-nous