gcc的奇怪行为,它的ld(链接器)选项可以删除不使用的函数



我试图在我的代码中删除未使用的函数(没有对它们进行调用),该代码使用gcc/g++构建在x86/Linux上。当我从gcc手册中阅读时,我使用以下选项:

CCFLAGS = -ffunction-sections -fdata-sections -Wl,--gc-sections,--print-gc-sections

使命令输出显示一些未使用的部分删除消息,如下所示:

/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选项是否真的删除了未使用的函数:

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

相关内容

  • 没有找到相关文章

最新更新