Thanks Matthew On Sun, Nov 27, 2011 at 6:59 PM, Matthew Flatt <mfl...@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. > > >
_________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users