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. 




Reply via email to