On 04/07/2015 09:00 AM, Stefan Ehrlich wrote: > compiler and linker options are: > avr-g++.exe -c -Os -Wall -fdata-sections -ffunction-sections > -fvisibility=hidden -fvisibility-inlines-hidden -fno-rtti -flto > -fuse-linker-plugin -mmcu=atmega8 ... > avr-gcc.exe -Wall -Os -Wl,-static -Wl,-flto -fuse-linker-plugin > -Wl,--strip-all -Wl,-s -Wl,--gc-sections -mmcu=atmega8 ... > > The more not used objects I use the worse the problem gets. > > Is there any possibility to remove unused virtual functions or at least the > objects, which are not used? I have not find any solution so far. > If not, is there a plan to add this feature to the linker?
Try adding -fwhole-program to the options. I haven't tried it. I believe that GCC assumes that the executable can be dynamically opened and its functions used as if it were a shared library. Because of that GCC has to keep things available. Although I would have thought visibility=hidden would have taken care of that. But -fwhole-program promises that this is the whole program and there isn't anything else linking with it. I've noticed that when specified, the output is heavily inlined and missing most function definitions so it might be what you want.