我不知道为什么GCC编译器标志-ffunction-sections和链接器标志--gc-sections不会消除不必要的响应。我最终的可执行文件中未引用的符号/功能代码。
为什么在GCC文档中无法正常工作?
可能我监督了一些意外的引用!
检查已经使用过这种非常好的方法:
链接器脚本中带有/ DISCARD /的GCC --gc-sections and finding symbol dependencies。没有成功没有提及我未使用的功能。
没有机会自动消除无效代码!为什么???
最佳答案
答案很简单(以我为例):
我正在使用CMake构建我的项目,它正在插入标记-rdynamic
!
据我所知,GCC文档中没有提到-rdynamic
和--gc-sections
选项的组合。 应该有这样的警告: -rdynamic
导致--gc-sections
无用的bcs。所有符号都被隐式引用。
另请参阅:What exactly does `-rdynamic` do and when exactly is it needed?
当然,只有CMake用户会受到此影响...(不知道):
要摆脱最不需要的-rdynamic
CMakeLists.txt,只需添加cmake_policy(SET CMP0065 NEW)
关于c++ - 为什么GCC --gc-sections和-ffunction-sections无法正常工作? (cmake版本),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56283941/