Re: [julia-users] Re: Examples of integrating Fortran code in Julia

2016-01-19 Thread Mauro
Welcome to Julia!

You probably shouldn't necromance such an old thread, instead make a new
one and link to the old ones you researched.

Anyway, in the old thread, I linked to a blog post of mine on this topic
(I just saw that its formatting was all messed up: now fixed):
http://maurow.bitbucket.org/notes/calling_fortran_from_python.html
http://maurow.bitbucket.org/notes/calling_fortran_from_c.html

The post outlines the steps I did to make it work and how you can use
the iso_c_binding module which prevents name-mangling and provides
C-datatypes.  Maybe this helps.

On Mon, 2016-01-18 at 20:36, pokerhontas...@googlemail.com wrote:
> Hi,
>
> first of all, I am new to Julia (and Fortran). I tried to follow OP's
> example and call Fortran from Julia. First, I was using the Intel Fortran
> compiler and tried to compile the following .f90 file (saved as f90tojl.f90)
>
> module m
> contains
>integer function five()
>   five = 5
>end function five
> end module m
>
> as a shared library, by entering the following in the command line:
>
> ifort f90tojl.f90 -O2 -dll -fPIC -o  ifortlib.dll
>
> the compiler ignores -fPIC since that's an unknown option apparently but
> two files are created, one object file and the dll. I then try to call the
> function from Julia and that's where the trouble starts.
>
> The suggested command in this thread doesn't work because I guess the Intel
> compiler has different name mangling than the gfortran compiler. So I tried
> to find the name of my function, wikipedia suggests m_MP_five_ for ifort,
> so I tried
>
> julia: ccall( (:m_MP_five, "ifortlib.dll"), Int, () )
>
> LoadError: ccall: could not find function m_MP_five in library ifortlib.dll
>
>
> So my guess is that I am not using the correct name mangling. I couldn't find 
> anything online so I tried to view the function name via the object manager 
> in visual studio and an external dll viewer program.
> In visual studio I got a meaningless error the external viewer just didn't do 
> anything (although it worked for other dll files). When I type
>
> julia: Libdl.dlopen("ifortlib.dll")
> Ptr{Void} @0x2a9d8fa0
>
> fwiw. At this point I got so pissed that I decided to install the gfortran 
> compiler and just follow this thread step by step. So in the cmd window, I 
> type:
>
> gfortran -shared -O2 f90tojl.f90 -fPIC -o gfortlib.dll
>
> (I get a warning that -fPIC is ignored, as written previously in this 
> thread). I use the dll viewer to determine the name of the function, its 
> __m_MOD_five indeed. Then
>
> julia: ccall( (:__m_MOD_five, "gfortlib.dll"), Int, () )
>
> LoadError: error compiling anonymous: could not load library "gfortlib.dll"
> The specified module could not be found.
>
>
> And
>
> julia: Libdl.dlopen("gfortlib.dll")
> LoadError: could not load library "gfortlib.dll"
> The specified module could not be found.
>
>
> And I have no clue what to do now.


Re: [julia-users] Re: Examples of integrating Fortran code in Julia

2016-01-19 Thread pokerhontas2k8

Yes, sorry, next time I will open a new thread. I actually already have a 
new problem, so I am going to post that in a new thread.

This particular problem here has been solved. I didn't manage to get it 
working with ifort (I guess there is no hope?) and with gfortran I noticed 
that the standard installation of this mingw was somehow 32bit. So I had to 
reinstall it using the 64bit version and then calling Fortran from Julia 
worked.




[julia-users] Re: Examples of integrating Fortran code in Julia

2016-01-18 Thread Pieterjan Robbe
I think you need to specify the path that points to the module, not just the 
module name.

[julia-users] Re: Examples of integrating Fortran code in Julia

2016-01-18 Thread pokerhontas2k8
Hi,

first of all, I am new to Julia (and Fortran). I tried to follow OP's 
example and call Fortran from Julia. First, I was using the Intel Fortran 
compiler and tried to compile the following .f90 file (saved as f90tojl.f90)

module m
contains
   integer function five()
  five = 5
   end function five
end module m

as a shared library, by entering the following in the command line:

ifort f90tojl.f90 -O2 -dll -fPIC -o  ifortlib.dll

the compiler ignores -fPIC since that's an unknown option apparently but 
two files are created, one object file and the dll. I then try to call the 
function from Julia and that's where the trouble starts. 

The suggested command in this thread doesn't work because I guess the Intel 
compiler has different name mangling than the gfortran compiler. So I tried 
to find the name of my function, wikipedia suggests m_MP_five_ for ifort, 
so I tried 

julia: ccall( (:m_MP_five, "ifortlib.dll"), Int, () )

LoadError: ccall: could not find function m_MP_five in library ifortlib.dll


So my guess is that I am not using the correct name mangling. I couldn't find 
anything online so I tried to view the function name via the object manager in 
visual studio and an external dll viewer program. 
In visual studio I got a meaningless error the external viewer just didn't do 
anything (although it worked for other dll files). When I type 

julia: Libdl.dlopen("ifortlib.dll")
Ptr{Void} @0x2a9d8fa0

fwiw. At this point I got so pissed that I decided to install the gfortran 
compiler and just follow this thread step by step. So in the cmd window, I type:

gfortran -shared -O2 f90tojl.f90 -fPIC -o gfortlib.dll

(I get a warning that -fPIC is ignored, as written previously in this thread). 
I use the dll viewer to determine the name of the function, its __m_MOD_five 
indeed. Then

julia: ccall( (:__m_MOD_five, "gfortlib.dll"), Int, () )

LoadError: error compiling anonymous: could not load library "gfortlib.dll"
The specified module could not be found.


And 

julia: Libdl.dlopen("gfortlib.dll")
LoadError: could not load library "gfortlib.dll"
The specified module could not be found.


And I have no clue what to do now. 






[julia-users] Re: Examples of integrating Fortran code in Julia

2014-12-17 Thread Tony Kelman
Also you're going to be better off using the MinGW-w64 cross-compilers, 
rather than the Cygwin's own gfortran. Try installing 
mingw64-x86_64-gcc-fortran through Cygwin's setup for 64 bit, or 
mingw64-i686-gcc-fortran for 32 bit. Then instead of calling gfortran to 
compile your Fortran code, call x86_64-w64-mingw32-gfortran (or 
i686-w64-mingw32-gfortran for 32 bit). Everything else should work more or 
less the same.


On Tuesday, December 16, 2014 6:04:43 PM UTC-8, Vathy M. Kamulete wrote:

 I posted this on StackOverflow. It was recommended I post here. See here 
 http://stackoverflow.com/q/27498755/1965432for background.

 Where can I find good examples of integrating (modern) Fortran code with 
 Julia? 

 I am using the GNU gfortran compiler (on Cygwin) for my own module. A good 
 example will hopefully start from the compilation stage, address mangled 
 names and call the subroutine from Julia via ccall. Most examples I've seen 
 skip the first two stages. On the SO post, I refer to Modern Fortran 
 explicitly because what I've seen so far tends to be for legacy code -- 
 think punchcard-style fixed-width formatting Fortran (that goes for GLMNet, 
 which was allegedly written in 2008 but adheres to those conventions).

 So imagine that I have the following module in Fortran90 file named 
 'f90tojl.f90':

 module m
 contains
integer function five()
   five = 5
end function five
 end module m

 This example is from here 
 http://en.wikipedia.org/wiki/Name_mangling#Name_mangling_in_Fortran. I 
 compile it with gfortan as follows to create a shared library:

  gfortran -shared -O2 f90tojl.f90 -o -fPIC f90tojl.so

 And my, admittedly shaky, understanding from reading the julia docs 
 suggest that I should be able to call the function five like so:

 ccall( (:__m_MOD_five, f90tojl), Int, () )

 It didn't work for me. I get ''error compiling anonymous: could not load 
 module f90tojl... . Anyone cares to enlighten me? I got the sneaky sense 
 I'm doing something silly

 Thanks in advance,

 V.