[Trilinos-Users] Fortran name mangling
Baker, Christopher G.
bakercg at ornl.gov
Wed Dec 15 06:15:07 MST 2010
The problem is that the symbol name is being mangled by the C++ compiler. A solution is to define it in an extern block:
$ cat test.cpp
#define Trilinos_Interface trilinos_interface_
extern "C" {
void Trilinos_Interface() { }
}
$ icpc -c test.cpp
$ nm test.o | grep trilinos
0000000000000000 T trilinos_interface_
However, I would recommend, if possible, following Scot's advice for standards-compliant and portable solutions to this problem (I'm not sure if you were on the receiving list for this):
On 12/14/10 10:39 AM, "M. Scot Breitenfeld" <brtnfld at uiuc.edu<mailto:brtnfld at uiuc.edu>> wrote:
You can use the BIND statement to avoid the need to guess the naming
convention,
interface
subroutine Trilinos_Interface(...) BIND(c,name='Trilinos_Interface')
end interface
This assumes you have a Fortran 2003 compiler. If this is true then also
make use of the ISO_C_BINDING module as
a portable (and easy way) to interface with C(++).
Scot
Chris
On 12/14/10 1:34 PM, "Alireza Nejadmalayeri" <Alireza.Nejadmalayeri at Colorado.EDU<mailto:Alireza.Nejadmalayeri at Colorado.EDU>> wrote:
Thanks, Chris. Here is what "nm Fortran_calls__Trilinos_CC_Interface.o | grep -i trilinos_interface" returns:
U trilinos_interface_
And nm libmyappLib.a | grep -i trilinos_interface :
Trilinos_Interface.o:
0000000000000050 T _Z19trilinos_interface_PiS_
0000000000000018 r _Z19trilinos_interface_PiS_$$LSDA
Could you please advise on these.
Thank you,
alireza
More information about the Trilinos-Users
mailing list