gpt4 book ai didi

c - gcc gc-sections 选项删除 crtbegin/crtend 对象

转载 作者:行者123 更新时间:2023-11-30 15:08:38 26 4
gpt4 key购买 nike

我尝试使用gc-sectionsffunction-sectionsfdata-sections来优化可执行文件。我还将带有 -u (未定义)的 init 函数提供给链接器。我的 init 函数和添加的所有使用的符号,以及其他未使用的符号已成功消除。一切都好。

但是 gcc 放入的 crtbegin,crtend 对象也会被消除。在这种情况下,我的可执行文件无法工作...是否有任何方法可以将 crtbegincrtend 对象保留在可执行文件中。

注意:crtbegin 的链接器中存在 KEEP() 指令,例如:KEEP(*crtbegin.o(.ctors)) KEEP(*crtbegin?.o(.ctors))

最佳答案

已经解决了。可执行文件崩溃并给出异常。由于 gc-section 选项删除了 crtbegin 函数,例如 __do_global_dtors_aux call__do_global_dtors_aux、frame_dummy、call_frame_dummy 等。因此,这会导致程序崩溃。

但是当您将 init 部分保留在链接器中时:“KEEP(*(.init))”,则保留这些函数,同时 gc-sections 选项清除其他未使用的符号。然后我的程序成功运行,没有任何崩溃。

关于c - gcc gc-sections 选项删除 crtbegin/crtend 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37238939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com