防止 g++ 添加额外的精灵部分
Posted
技术标签:
【中文标题】防止 g++ 添加额外的精灵部分【英文标题】:Prevent g++ adding extra elf sections 【发布时间】:2015-07-22 04:53:19 【问题描述】:当使用 g++ 编译时,它会为几乎每个函数创建一个额外的部分。
这发生在带有elf64
可执行文件的linux
上。
举例:
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
【问题讨论】:
如果省略-g
(不添加调试符号)会怎样?
【参考方案1】:
text._ZN12MemoryMapper11SetUpMemoryEP11KernelStart
这是一个带有vague linkage 的内联函数。
您可以通过在源代码中不包含任何内联函数来避免为内联函数创建此类部分。可能有一个选项可以禁用为内联函数生成代码,但我没有找到。
请注意,禁用此功能通常是浪费时间:它们不会造成任何伤害,如果您有多个编译单元,则需要使用它们,否则您会遇到链接错误或二进制膨胀。
【讨论】:
以上是关于防止 g++ 添加额外的精灵部分的主要内容,如果未能解决你的问题,请参考以下文章
额外权限whowhoamilastlastblastlogbasename等命令