[racket] FFI on Windows

From: Harry Spier (vasishtha.spier at gmail.com)
Date: Sun Nov 27 20:56:42 EST 2011

Thanks Matthew

On Sun, Nov 27, 2011 at 6:59 PM, Matthew Flatt <mflatt at cs.utah.edu> wrote:

> At Sun, 27 Nov 2011 18:20:46 -0500, Harry Spier wrote:
> > Dear list members,
> > On going through the article on the FFI by Eli Barzilay and Dmitry
> Orlovsky
> > http://www.ccs.neu.edu/scheme/pubs/scheme04-bo.pdf
> >
> > It says:
> > "libffi is maintained and distributed as part of the GCC project,
> > but its goal is to provide a portable library. We use it for all
> > platforms that PLT Scheme targets, including Windows (using a
> > slightly adapted version that works with Microsoft’s compiler, courtesy
> > of the Thomas Heller [13])."
>
> (Racket now uses the main libffi sources for Windows, too.)
>
> > Does that mean that if I'm using the Windows version of Racket and I want
> > to use the FFI to interface to ImageMagick, that the ImageMagick Windows
> > executable must also be compiled with the microsoft C compiler rather
> than
> > with  MingW GCC ?
>
> No.
>
> > A few years ago when I interfaced ImageMagick to Ruby using Ruby's
> > ImageMagick interface "RMagick" there was a problem for a while about
> > RMagick being compiled with Microsoft Visual C compiler (it may have
> been a
> > particular version of the Visual C compiler?)  and I think the
> ImageMagick
> > executable for windows was compiled with MingW GCC.  The problem was
> > resolved when the RMagick interface was compiled using the same compiler
> as
> > ImageMagick.
>
> That sounds like an issue with mismatched C runtime libraries.
>
> The main way a mismatch can show up with Racket's FFI is when a foreign
> function allocates a value, and the caller is supposed to free it with
> free(). In that case, calling the Racket `free' function may not work,
> because it may use a different memory allocator from the one linked to
> the foreign library --- i.e., different instances of malloc() and
> free() from different C libraries.
>
> Most libraries that provide allocation functions also provide
> corresponding deallocation functions instead of relying on free(), and
> that avoids the problem. Meanwhile, Racket uses "msvcrt.dll" as its C
> runtime library, which is consistent with most binary distributions of
> open-source software. I believe that MinGW binaries by default use
> "msvcrt.dll".
>
> For all of those reasons, you probably won't run into problems due to a
> compiler mismatch when using Racket's FFI.
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20111127/fed5e4e4/attachment.html>

Posted on the users mailing list.