Understanding the undefine flags passed to gcc when linking

Bruce, Joseph R (Joe) joseph.bruce at pnl.gov
Wed Mar 12 19:10:24 EDT 2008

Thanks Simon.  That is the best answer I've received to this question in
many askings.

I will try to go the shared library route.  A question about you last
comment: when you say link RTS and base, you mean extract the object
files and package in a single .a?  Am I going to run into namespace


> -----Original Message-----
> From: Simon Marlow [mailto:simonmarhaskell at gmail.com] 
> Sent: Wednesday, March 12, 2008 3:18 PM
> To: Bruce, Joseph R (Joe)
> Cc: glasgow-haskell-users at haskell.org
> Subject: Re: Understanding the undefine flags passed to gcc 
> when linking
> Bruce, Joseph R (Joe) wrote:
> >
> > When I run 'ghc -v ...', the linking is done via gcc->ld 
> with a large 
> > list of -u flags passed in.  I'm hoping to find a way to link my 
> > object files without those flags, but first I need to 
> understand what 
> > they are doing.  Can someone explain it to me?  Or point me to 
> > documentation that explains it?
> > 
> > My ultimate goal is to build a static Haskell library and make it 
> > available to c programmers ignorant of Haskell.  The undefines 
> > described above are a major obstacle.  Does anyone know a 
> way around them?
> The -u flags arise because there is a circular dependency 
> between the RTS (libHSrts.a) and the base package 
> (libHSbase.a).  The RTS refers to a few datatypes and 
> functions in the base package, for instance the constructors 
> for True and False, I#, C# and so on, and some exceptions 
> that the RTS automatically raises for certain events (e.g. 
> stack overflow, non-termination).
> One way to avoid needing the -u flags would be to link the 
> base package twice, but that would slow down linking, and 
> twice might not be enough. 
>   With shared libraries there's no problem, because we always 
> just link the whole library, this is only an issue with 
> static libraries.
> So for building a static Haskell library, can't you just link 
> the RTS and base package together in a single .a file?
> Cheers,
> 	Simon

More information about the Glasgow-haskell-users mailing list