[Haskell-cafe] Re: Cabal and linking with static libs (.a files)

Simon Marlow simonmarhaskell at gmail.com
Fri Jun 9 11:22:18 EDT 2006


Ketil Malde wrote:
> (Reposted to café - my -libraries mail seems to have gotten lost along
> the way)
> 

> I'm building an interface to a C library, which comes in the form of
> two .a files.  I can't seem to get Cabal to link statically with
> these, so that the resulting package (libHSfoo-v.v.a) is self
> contained. 
> 
> I've tried fiddling with Cabal's ld-options and extra-libraries, but
> so far with no success - loading my package either results in GHC
> looking for (and failing to find) .so files, or "unknown symbol".

A static library doesn't normally specify what it links to, that all 
happens at link time.  So if you say -optl-static when linking your 
program, it won't have any dependencies on shared libraries.

What you actually want to do, I suspect, is to include verbatim copies 
of the .a dependencies in your (binary) Cabal package, to make it 
self-contained.  Cabal doesn't have a way to do that at the moment.  But 
it's quite easy: just copy the .a files from /usr/lib (or wherever) and 
put them in the same place as your libHSpackage.a.

> PS: did --user stop working (with GHC 20060607)?  I'm adding --user to
> both 'configure' and 'install', but Cabal still wants to put things in
> /usr/local. 

I don't think anything changed: --user never changed the install prefix, 
it only ever changed where dependencies are found.  To install in your 
home dir, you also need to say --prefix=$HOME.

Cheers,
	Simon


More information about the Haskell-Cafe mailing list