防止g ++添加额外的精灵部分

时间:2015-07-22 04:53:19

标签: c++ g++ elf objcopy

使用g ++进行编译时,几乎为每个函数创建了一个额外的部分。 这种情况发生在具有linux可执行文件的elf64上 例如:

text._ZN12MemoryMapper11SetUpMemoryEP11KernelStart

如何告诉g ++在.text上发出所有代码,因此只有一个.text部分

没有-ffunction-sections

就会发生这种情况

这些部分甚至在

之后
objcopy -S file.elf striped

=============================================== ===

额外信息:

CXXFLAGS = -g -O0 -ffreestanding -fno-rtti -fno-exceptions -fno-asynchronous-unwind-tables -std=c++11 $(INCLUDES)
g++ version = gcc (GCC) 5.1.0

1 个答案:

答案 0 :(得分:2)

  

text._ZN12MemoryMapper11SetUpMemoryEP11KernelStart

这是一个带有vague linkage内嵌功能。

您可以通过在源中没有任何内联函数来避免为内联函数创建此类部分。可能有一个禁用生成内联函数代码的选项,但我找不到。

请注意,禁用此功能通常是浪费时间:它们不会对任何内容造成任何伤害,如果您有多个编译单元,或者您将遇到链接错误或二进制膨胀,则需要它们。