FFI Help

Glynn Clements glynn.clements@virgin.net
Wed, 4 Jun 2003 08:32:24 +0100


Matthew Donadio wrote:

> I am just starting to experiment with FFI, and am running into a
> problem.  I was to create an FFI to the lgamma(3) found in many of the
> newer libm implementations.  My code follows the sig.
> 
> The lgamma function works.  The gamma function core dumps (I am using
> ghc 5.04.3) on me.  gdb reports a SIGSEGV in signgam(), but I'm not sure
> why.  I believe that I need to use the monad because signgam is only
> valid after lgamma returns.
> 
> Does anyone have an idea what I am doing wrong?
> 
> Thanks.
> 
> -- 
> Matthew Donadio <m.p.donadio@ieee.org>
> 
> > module Gamma (gamma, lgamma) where
> 
> > import System.IO.Unsafe
> 
> > foreign import ccall "math.h lgamma"  lgammaC  :: Double -> IO Double 
> > foreign import ccall "math.h signgam" signgamC :: IO Int

signgam is an "int" variable, but this assumes that it is a function
of type "int signgam(void)".

Write a C wrapper "int get_signgam(void) { return signgam; }" and
import that.

-- 
Glynn Clements <glynn.clements@virgin.net>