Cool, good to know. You're no hassle at all, don't worry about asking
questions. I think we have the preferred MinGW-w64 toolchain version
documented in README.windows.md, but I may have lost that information in my
most recent rewrite of that file. The preferred set of options at the
moment are i686 for building libraries to be used with 32 bit Julia, x86_64
for 64 bit, win32 threads in both cases, sjlj for 32 bit or seh for 64 bit.
But the requirements for building Julia itself are slightly pickier than
the requirements for building external libraries for use with ccall, you
can occasionally get away with different choices.
On Tuesday, July 14, 2015 at 2:00:19 PM UTC-7, LarryD wrote:
>
> IT'S WORKING!
>
> I reinstalled the MinGW-W64 complier with the setup settings:
> Architecture I686, Threads posix, Exception dwarf (which somehow I didn't
> see before) and now everything is working! Thanks for all the help
>
> Larry
>
> On Tuesday, July 14, 2015 at 12:30:06 PM UTC-5, LarryD wrote:
>
>> 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
>>>>>>>
>>>>>>>