[PLUTO-devel] linkink eterogeneo fortran-C++

Andrea Raimondi rainaple a tin.it
Mer 29 Ott 2003 08:28:55 CET


Gregorio D'Agostino wrote:
> Cari Pinguinisti

Ciao,

> In particolare mi piacerebbe sapere come si
> devono chiamare le routine in C++ per essere
> agganciate (linked) nel fortran e viceversa.

Allora il problema è semplice: siccome il C++
lavora con gli oggetti, tutte le routines sono
collegate a degli oggetti. Per fare in modo che il
compilatore riconosca gli overload( sovraccarichi )
delle varie routines, il compilatore applica ai nomi
delle stesse una serie di modifiche che
rispecchiano i parametri corrispondenti.

Questo processo è chiamato "name mangling".

Per far "vedere" le routines C++ agli OBJ del
fortran bisogna agganciare una "extrn C" a tutte le
funzioni da fargli vedere.

Quando il tuo collega ha detto "tutte le routines del
fortran sono statiche" probabilmente si riferiva al
fatto che devi, in C++, dichiararle come STATIC.

Quindi, le tue dichiarazioni Fortran nei moduli C++
saranno tipo:

extrn static void/Int/quellochetepare MiaFunzione;

Mentre le tue dichiarazioni C++ da esportare nel
file OBJ saranno tipo:

extrn C {
                   static void MiaFunzioneCpp;
            }


Questo per sommi capi, visto che di C++ ci capisco
poco... se c'è qualcuno piu' esperto di uno dei due
aspetti, per favore si faccia avanti, così tutti
impariamo qualcosa di nuovo.

> Ringraziando in anticipo Vi saluto cordialmente.

Prego,

> Gregorio D'Agostino

Andrea




Maggiori informazioni sulla lista pluto-devel