我试图在我的代码中删除未使用的函数(没有对它们进行调用),该代码使用 gcc/g++ 在 x86 / Linux 上构建。从 gcc 手册中阅读时,我使用以下选项:
CCFLAGS = -ffunction-sections -fdata-sections -Wl,--gc-sections,--print-gc-sections
Make 命令输出确实显示了一些未使用的部分已删除消息,如下所示:
/usr/bin/ld: Removing unused section '.text._ZN14myclass30myunusedfuncEPPNS_8device_sE' in file './myproject/x86-linux/release/file1.o'
但为了确保,我试图找出该符号是否存在于 *.o 目标文件中,所以当我这样做时:
strings --all -f file1.o|grep myunusedfunc
我看到输出如下
myproject/x86-linux/debug/file1.o: [] myclass::myunusedfunc()
myproject/x86-linux/debug/file1.o: myunusedfunc
myproject/x86-linux/debug/file1.o: _ZN14myclass30myunusedfuncEPPNS_8device_sE
myproject/x86-linux/debug/file1.o: .rel.text._ZN14myclass30myunusedfuncEPPNS_8device_sE
myproject/x86-linux/debug/file1.o: _ZN14myclass30myunusedfuncEPPNS_8device_sE
这是怎么回事?
这些 gcc/ld 选项是否真的删除了未使用的功能: