ar: POSIX way of creating static library containing similarly named objects

Miguel Guedes miguel.a.guedes@gmail.com
Tue Apr 23 10:46:00 GMT 2013


Hi Nick,

On Fri, 19 Apr 2013 08:58:43 +0100, nick clifton wrote:

> Use the 'q' option rather than the 'r' option when adding the object
> files to the library - and create the symbol index after adding the
> objects, rather than at the same time.  Ie:
> 
>    % ar cr libstate.a src/namespace_foo/state.o % ar q  libstate.a
>    src/namespace_bar/state.o % ar s  libstate.a % readelf -c libstate.a
>    Index of archive libstate.a: (2 entries, 0x8 bytes in the symbol
>    table)
>    Binary libstate.a(state.o) contains:
>          foo
>    Binary libstate.a(state.o) contains:
>          foo

This technique worked really well until I noticed strange behaviour when 
running programs generated from partial builds where symbols were getting 
duplicated in the library and not replaced as they should.

Only solution to this (that I can see) would be to rebuild the library 
each time a partial build is initiated and add every single object using 
the `q' option, but in large projects this isn't really viable.

Another possible solution is to drop my pedantic hat and just go with 
Cary's suggestion of using a thin archive instead.

Nick and Cary, thanks for the input.



More information about the Binutils mailing list