FFI and Libraries using GMP

Benedikt Huber benjovi at gmx.net
Mon Sep 10 11:12:09 EDT 2007


Hello,

I've been struggling using FFI bindings to libraries which rely on  
the GNU Mp Bignum library (gmp) - this is apparently a well known  
problem (http://hackage.haskell.org/trac/ghc/ticket/311).
I do want to use some of those libraries however and so I started to  
get them work on ghc-6.6.1/darwin_8_i368.
But as no solution was close to being satisfactory, I'd like to ask  
for some advice.

Those two options worked to some extend:
(1)
Create or modify the library in question, so gmp is statically linked  
and its symbols are hidden.
When source code is available, this is relatively easy, altough it  
requires modification of the build process (which can be a hassle).  
If a static "ar" archive is available, it is cumbersome (at least on  
Mac Os X I ran into a lot of troubles using nmedit), but possible.  
Furthermore, the resulting libraries are bloated, as each of them  
contains a copy of the GMP; left alone portability issues.
(2)
As suggested in ticket#311, I tried switching the allocator functions  
when switching to FFI. It worked, but not in GHCi; also, doing it  
manually is a lot of work, because, as far as I could figure out, it  
is neccessary to write a wrapper function for every C-function  
(indirectly) using the gmp.

Furthermore, most of the libraries expose gmp datatypes (mpz_t,mpq_t)  
in their API. I currently use a little haskell module working on  
GHC.Exts, but that's propably not a good option from a maintainer's  
point of view. There are certainly other possibilities, but I  
couldn't find one which is both maintainable and portable.

I would be very grateful for any advice, or some information on plans  
for resolving ticket #311; I'm aware that there are long-term plans  
for replacing gmp, but I'd prefer a seperate short-term solution for  
the problems with the FFI. There are some great libraries (like the  
Parma Polyhedral Library, to pick an example) out there using gmp,  
and it would be nice if writing bindings to those libs could be  
simplified.

Thanks,
Benedikt



More information about the Glasgow-haskell-users mailing list