Re: Question de c/cpp

Top Page

Reply to this message
Author: Patrick Dupre
Date:  
To: Raphaël Dorado
CC: guilde
Subject: Re: Question de c/cpp
Merci pour le retour,

Pas sur de tout comprendre,
Je ne touche pas au ludcmp.h
je fais
static SOE.solve (*par_soe -> Lambda, rho) ;
static devant ?
std::cout << SOE.det () << " " ;

Je n'utilise jamais static.

ou bien je dois modifier
ludcmp.h

avec static void LUdcmp::solve(VecDoub_I &b, VecDoub_O &x)

ou
je cree un
ludcmp.cpp



===========================================================================
 Patrick DUPRÉ                                 | | email: pdupre@???
===========================================================================



> Sent: Wednesday, May 29, 2024 at 11:31 PM
> From: "Raphaël Dorado" <rdorado@???>
> To: guilde@???
> Subject: Re: Question de c/cpp
>
> Effectivement déclarer le corps de fonction à scope global dans un ".h", c'est
> pas des meilleurs pratiques...
>
> La solution sale et rapide, c'est de rajouter "static" devant chaque fonction
> déclarée dans ludcmp.h. Mais il y aura une instance binaire de la fonction par
> .o qui incluera ludcmp.h . Tout a fait acceptable pour du code de recherche ou
> interne.
>
> Le 29/05/2024 à 22:10, Patrick Dupre a écrit :
> > Bonsoir,
> >
> > J'utilise la numerical recipes 3
> > Il y un include
> > ludcmp.h
> > que j'utilise dans 4 routines,
> > 2 fois dans 2 routines d'un meme fichier A.cpp
> > 2 fois dans 2 routines d'un autre fichier B.cpp
> > Tout se passe bien si je lie 1 seul des 2 fichiers, cas A.o ou B.o
> > au programme principal.
> > Par contre le linkeur n'est pas contant si je lie les 2 objet A.o et B.o
> >
> > Typîqueùent, je fais
> > #include <ludcmp.h>
> > dans A.cpp et B.cpp
> > et
> >      LUdcmp SOE (*par_soe -> mat) ;
> >      SOE.solve (*par_soe -> Lambda, rho) ;
> > dans les 4 routines

> >
> > A.cpp:(.text+0x0): multiple definition of `LUdcmp::solve(NRvector<double> const&, NRvector<double>&)'; B.o:B.cpp:(.text+0x0): first defined here
> > /usr/bin/ld: A.o: in function `LUdcmp::solve(NRmatrix<double> const&, NRmatrix<double>&)':
> > A.cpp:(.text+0x3a0): multiple definition of `LUdcmp::solve(NRmatrix<double> const&, NRmatrix<double>&)'; B.o:B.cpp:(.text+0x3a0): first defined here
> > /usr/bin/ld: B.o: in function `LUdcmp::inverse(NRmatrix<double>&)':
> > B.cpp:(.text+0x540): multiple definition of `LUdcmp::inverse(NRmatrix<double>&)'; A.o:A.cpp:(.text+0x540): first defined here
> > /usr/bin/ld: B.o: in function `LUdcmp::det()':
> >
> > Pourquoi ce conflit ?
> >
> > Les varaibles SOE ont des adresse differents.
> > Pourquoi le function solve pose probleme ?
> >
> > Est-ce qu'il y a une option a passer au linkeur ?
> > Suis-je condamne a faire un librairie dynamique ?
> > Ou bien je n'ai pas compris quelque chose ?
> >
> > Merci.
> >
> > ===========================================================================
> >   Patrick DUPRÉ                                 | | email: pdupre@???
> > ===========================================================================

> >
> >
>
>
>