使用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

最佳答案



这是vague linkage的内联函数。

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

请注意,禁用此选项通常会浪费时间:它们不会损害任何东西,如果您有多个编译单元,则必须这样做,否则会出现链接错误或二进制膨胀。

关于c++ - 防止g++添加额外的elf节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31554116/

10-17 01:41