Maybe this can help too: http://maurow.bitbucket.org/notes/calling_fortran_from_misc.html
By using bind(c) or iso_c_binding name mangling is turned off. On Fri, 2014-11-14 at 22:15, Luthaf <[email protected]> wrote: > The first way to compile is the good one, but gfortran is slightly > changing the names of the function. You can see it by running the `nm` > command : > ``` > $ nm simplemodule.so > 0000000000000f98 T ___simplemodule_MOD_foo > ``` > > So you have to call `__simplemodule_MOD_foo` from Julia side (yes, with > one underscore less. I don't know why ...) > > ``` > julia> ccall((:__simplemodule_MOD_foo, "simplemodule.so"), Int32, > (Int32,), 3) > ``` > > This will also lead to a segfault, as Fortran except values to be passed > by reference, and not by value. So the final call is > > ``` > julia>ccall((:__simplemodule_MOD_foo, "simplemodule.so"), Int32, > (Ptr{Int32},), &3) > 6 > ``` > > Regards, > Guillaume > > Andre Bieler a écrit : >> tried calling a simple fortran function from julia but did not succeed: >> this is the fortran code: >> >> || >> !fileName =simplemodule.f95 >> modulesimpleModule >> >> contains >> functionfoo(x) >> integer ::foo,x >> foo =x *2 >> endfunctionfoo >> >> >> endmodulesimplemodule >> >> >> which is then compiled with: >> >> *gfortran simplemodule.f95 -o simplemodule.so -shared -fPIC* >> >> and finally the julia call is: >> >> || >> >> ccall((:foo,"/fullPathTo/simpleMod.so"),Int32,(Int32,),3) >> >> >> which then leads to the following error: >> >> ERROR: ccall: could not find function foo in library >> /fullPathTo/simpleMod.so >> in anonymous at no file >> >> >> >> when compiling with: >> >> gfortran -c simplemodule.f95 -o simplemodule.so -shared -fPIC >> >> i get a different error: >> >> *ERROR: error compiling anonymous: could not load module >> /fullPathTo/simplemodule.so: /fullPathTo/simplemodule.so:* >> *only ET_DYN and ET_EXEC can be loaded* >> >> >> >> Can anyone tell me what I am missing? >> I do realize I would not need to call fortran to multiply a variable >> by 2, but its a starting point.. >> >> >> Thanks! >> Andre
