I hope I'm not wearing out my welcome here, but I think I'm getting
closer: I downloaded the MinGW-w64-install.exe file and set it up with
some choices that I didn't quite understand. The ccall function now seems
to find the module, but then Julia goes into a tailspin of error messages
and has to be crashed.
My installation choices were Architecture - i686 or x86-64, Threads - posix
or win32, Exception - she or sjlj.
Do I have the write installation for the gfortran I need, and if so, what
are my choices from the above?
Thanks
On Monday, July 13, 2015 at 5:56:47 PM UTC-5, Tony Kelman wrote:
> Where did you compile that from? Maybe you were trying to use the cygwin
> version of gfortran instead of the mingw cross-compiler version
> (x86_64-w64-mingw32-gfortran) ? That test file and ccall invocation gives
> an EXCEPTION_ACCESS_VIOLATION for me, I think you need to pass parameters
> by reference.
>
> ccall((:__nuts_MOD_foo, "nuts.so"), Int32, (Ref{Int32},), 3)
>
> works for me on Julia 0.4-dev, or
>
> ccall((:__nuts_MOD_foo, "nuts.so"), Int32, (Ptr{Int32},), &3)
>
> on Julia 0.3.
>
>
> On Monday, July 13, 2015 at 3:39:05 PM UTC-7, LarryD wrote:
>>
>> I'm afraid I'm not getting anywhere. I decided to forget the SilverFrost
>> compiler and go with gfortran, attempting to mimic the examples I've found
>> online. My test Fortran code is
>>
>> !fileName = nuts.f95
>> module nuts
>> integer none
>> contains
>> function foo(i)
>> integer :: i, foo
>> foo = i + 3
>> end function foo
>> end module nuts
>>
>> I compiled with
>>
>> gfortran nuts.f95 -o nuts.so -shared -fPIC
>>
>> and got the warning message
>>
>> f951.exe: warning: -fPIC ignored for target (all code is position
>> independent).
>>
>> Since a nuts.so file was generated I tried the ccall: (my working
>> direcfory is c:\users\larry\juliastuff)
>>
>> ccall((:__nuts_MOD_foo, "C:\\Users\\Larry\\JuliaStuff\\nuts.so"), Int32,
>> (Int32,), 3)
>>
>> and got the error message
>>
>> error compiling anonymous: could not load module
>> C:\Users\Larry\JuliaStuff\nuts.so: The specified module could not be found.
>>
>> Clearly I'm doing some thing(s) wrong. Why am I getting the Fortran
>> warning that nobody else gets, and why can't ccall find the module?
>>
>> Thanks in advance for your time and patience with a newbie.
>>
>> Larry
>>
>> On Saturday, July 11, 2015 at 12:31:44 PM UTC-5, Tony Kelman wrote:
>>
>>> I've never heard of that compiler, which surprises me a little. It looks
>>> like it's primarily for 32 bit Windows, so you'll need to use a 32 bit
>>> version of Julia to call into shared libraries built using that compiler.
>>> If you have access to the Fortran source you could also try rebuilding with
>>> the more common open-source MinGW-w64 version of gfortran, for either 32 or
>>> 64 bit Windows. If you only have access to compiled binaries, are they
>>> shared libraries (dlls) or static libraries? If they're dll's, you can try
>>> looking at them using Dependency Walker to see what the exported symbol
>>> names are, then call them according to the "interfacing with C and Fortran"
>>> documentation. If you only have static libraries, you could try calling the
>>> linker to build a shared library out of them.
>>>
>>>
>>> On Saturday, July 11, 2015 at 6:36:30 AM UTC-7, Stefan Karpinski wrote:
>>>>
>>>> In general, the only issues with calling Fortran involve calling
>>>> convention incompatibility with C. There's a fairly old issue about
>>>> implementing fcall <https://github.com/JuliaLang/julia/issues/2167>
>>>> (cf ccall), which natively emits calls using the Fortran calling
>>>> convention. Have you tried calling code compiled with this compiler and
>>>> had
>>>> problems?
>>>>
>>>> On Saturday, July 11, 2015, LarryD <[email protected]> wrote:
>>>>
>>>>> I'm just starting to learn Julia, so I apologize for dumb questions.
>>>>> Does anybody have experience calling stuff written in SilverFrost Fortran
>>>>> from Julia? Thanks.
>>>>>
>>>>> LarryD
>>>>>
>>>>>