Indeed this is the best solution. If you really want a clean portable solution, take a look at any of the files in ompi/mpi/fortran/mpif-h directory, to see how we define the 4 different versions of the Fortran interface.
George. On Mon, Dec 12, 2016 at 10:42 AM, Clement FOYER <clement.fo...@gmail.com> wrote: > Thank you all for your answers. > > I stayed with the C version, with the FORTRAN symbols added as it worked > with the tests I was willing to start. Nevertheless, in order to keep a > more proper/portable solution, is it possible to use the same tools as in > ompi/mpi/fortran/mpif-h/init_f.c in order to generate the mangled symbols > (i.e. using #pragma weak or OMPI_GENERATE_F77_BINDINGS ) ? > > Thank you. > > Clément FOYER > > > > On 12/12/2016 04:21 PM, Jeff Squyres (jsquyres) wrote: > >> If your Fortran compiler is new enough (and it *probably* is...?), you >> can use the BIND(C) notation to ease C / Fortran interoperability issues. >> >> >> On Dec 12, 2016, at 5:37 AM, Gilles Gouaillardet < >>> gilles.gouaillar...@gmail.com> wrote: >>> >>> Clement, >>> >>> Ideally, your LD_PRELOAD'able library should be written in Fortran so >>> you do not even run into this kind of issues (name mangling + parameter >>> types) >>> >>> If you really want to write it in C, you have to do it all manually >>> >>> SUBROUTINE MPI_INIT(ierror) >>> INTEGER IERROR >>> >>> can become >>> >>> void mpi_init_(MPI_Fint * ierror) >>> >>> Note mangling is compiler dependent. >>> For most compilers, this is the function name with all lower cases, >>> followed by one or two underscores. >>> >>> You will also have to convert all parameters >>> INTEGER comm >>> will be replaced (modulo the typos) with >>> MPI_Comm c_comm; >>> MPI_Fint *comm; >>> c_comm = MPI_Comm_f2c(*comm); >>> >>> And so on, that is why Fortran wrapper is preferred, >>> plus there might be over caveats with Fortean 2008 >>> >>> Cheers, >>> >>> Gilles >>> >>> On Monday, December 12, 2016, Clement FOYER <clement.fo...@gmail.com> >>> wrote: >>> Hello everyone, >>> >>> I have been trying to redirect MPI_Init and MPI_Finalize calls from a >>> FORTRAN application (the CG benchmark from NAS Parallel Benchmarks). It >>> appears that in the fortran application the MPI_Init function signature is >>> "mpi_init_", whereas in my shared object it is MPI_Init. How is the f-to-c >>> binding done in Open-MPI? How can I change the Makefile.am (or add a >>> configure.m4) in order to check the way this name mapping is done by the >>> compiler, and how to add the proper symbols so that my shared object could >>> be used also with FORTRAN programs ? >>> >>> Thank you in advance, >>> >>> Clément FOYER >>> >>> _______________________________________________ >>> devel mailing list >>> devel@lists.open-mpi.org >>> https://rfd.newmexicoconsortium.org/mailman/listinfo/devel >>> _______________________________________________ >>> devel mailing list >>> devel@lists.open-mpi.org >>> https://rfd.newmexicoconsortium.org/mailman/listinfo/devel >>> >> >> > _______________________________________________ > devel mailing list > devel@lists.open-mpi.org > https://rfd.newmexicoconsortium.org/mailman/listinfo/devel >
_______________________________________________ devel mailing list devel@lists.open-mpi.org https://rfd.newmexicoconsortium.org/mailman/listinfo/devel