[objcopy] relocation sections

Nick Clifton nickc@redhat.com
Fri Dec 21 16:31:00 GMT 2007

Hi Robert,

> I want to use objcopy to remove the useless sections from the object
> file in order the shrink the library.

Why ?  Or more specifically, how can you know that they are useless ?  Since 
you are creating a library rather than an executable, you cannot know which 
sections in which object files in the library will be needed by whatever 
application links against this library.

> Now I am using libpng for example.
> I add -ffunction-sections and -fdata-sections to CFLAGS of the Makefile
> as to put every function into its own function.
> But when I ran:
> $objcopy -R .text.png_read_info pngread.o 
> BFD: stXXXXYNYHix: symbol `png_read_info' required but not present
> objcopy: stXXXXYNYHix: No symbols
> $objcopy -N png_read_info pngread.o
> BFD: stXXXX8m8Nnh: symbol `png_read_info' required but not present
> objcopy: stXXXX8m8Nnh: No symbols
> the comment of the error in bdf/elf.c is as bellow:
> /* This case can occur when using --strip-symbol on a symbol
>    which is used in a relocation entry.  */
> So when I used --strip-all to remove all the symbols and relcation
> informations of the object file.
> This time the useless sections can be deleted.
> But I don't want to remove all the symbols info, and I have no idea what
> to do. 

Simple - do not try to remove these sections from the object files.  Instead 
let the linker do it for you when you are creating your executable.  Just add 
the --gc-sections option to the linker command line and it will take care of 
eliminating any unused sections from the resultant binary.


More information about the Binutils mailing list