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} @0x000000002a9d8fa0
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.