使用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
答案 0 :(得分:2)
text._ZN12MemoryMapper11SetUpMemoryEP11KernelStart
这是一个带有vague linkage的内嵌功能。
您可以通过在源中没有任何内联函数来避免为内联函数创建此类部分。可能有一个禁用生成内联函数代码的选项,但我找不到。
请注意,禁用此功能通常是浪费时间:它们不会对任何内容造成任何伤害,如果您有多个编译单元,或者您将遇到链接错误或二进制膨胀,则需要它们。