【问题标题】:Prevent g++ adding extra elf sections防止 g++ 添加额外的精灵部分
【发布时间】: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(不添加调试符号)会怎样?

标签: c++ g++ elf objcopy


【解决方案1】:

text._ZN12MemoryMapper11SetUpMemoryEP11KernelStart

这是一个带有vague linkage内联函数。

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

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

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    相关资源
    最近更新 更多