[objcopy] relocation sections
Fri Dec 21 16:31:00 GMT 2007
> 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