1

我试图在我的代码中删除未使用的函数(没有对它们进行调用),该代码使用 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 选项是否真的删除了未使用的功能:

4

1 回答 1

1

您正在查看.o文件,但这是链接器的输入,而不是输出。该.o文件将包含所有函数,链接器不应将未使用的函数发送到链接输出中。但它不会编辑.o文件。

于 2013-01-08T01:19:39.543 回答