The warning doesn't matter - you can just remove -fPIC. Try running the ccall from Julia in the same directory as your .dll file (which must exist..) or add the path to DL_LOAD_PATH.
On Sun, Dec 21, 2014 at 12:16 PM, Vathy M. Kamulete <[email protected]> wrote: > Maybe I'll need to switch to mingw64. On Cygwin, trying to compile issues > a warning: > > f951: warning: -fPIC ignored for target (all code is position independent) > [enabled by default] > > That's for both ways of compiling: .so and dll. > And I still get the dreaded error: > > ''error compiling anonymous: could not load module f90tojl... " > > I think CodeBlocks comes with mingw64 so I'll give that a try soon... > > Thanks, > V. > > > On Tuesday, December 16, 2014 11:27:41 PM UTC-5, Isaiah wrote: >> >> With the following changes, your example works for me on mingw64: >> >> "-o" needs to be paired with a filename: >> >> gfortran -shared -O2 f90tojl.f90 -fPIC -o f90tojl.dll >> >> This will allow your original ccall invocation to work. Julia doesn't >> look at ".so" files by default on windows, but the following pair will also >> work; the shared library extension is given explicitly in the ccall: >> >> gfortran -shared -O2 f90tojl.f90 -fPIC -o f90tojl.so >> julia> ccall( (:__m_MOD_five, "f90tojl.so"), Int, () ) >> >> Hope this helps to get started. I agree that it would be great to have a >> working Fortran example -- if you have a suggested example (or even this >> one) please consider making a pull request (see https://github.com/ >> JuliaLang/julia/blob/master/CONTRIBUTING.md). >> >> >> On Tue, Dec 16, 2014 at 9:04 PM, Vathy M. Kamulete <[email protected]> >> wrote: >> >>> I posted this on StackOverflow. It was recommended I post here. See here >>> <http://stackoverflow.com/q/27498755/1965432>for 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. >>> >> >>
