我尝试使用gc-sections
,ffunction-sections
和fdata-sections
来优化可执行文件。我还给链接器提供了带-u(undefined)的init函数。我的init函数和添加的所有使用的符号以及其他未使用的符号都被成功删除。一切都好。
但是crtbegin
,crtend
对象也被消除了,这些对象由gcc放置。在那种情况下,我的可执行文件不起作用...是否有任何方法可以在可执行文件中保留crtbegin
和crtend
个对象。
注意:KEEP()
的链接中存在crtbegin
指令,例如:KEEP(*crtbegin.o(.ctors))
KEEP(*crtbegin?.o(.ctors))
等。
答案 0 :(得分:1)
它解决了。可执行文件崩溃并发出异常。由于gc-section选项正在删除crtbegin函数,例如__do_global_dtors_aux call__do_global_dtors_aux,frame_dummy,call_frame_dummy等。因此导致程序崩溃。
但是当您将init部分保留在链接器中时: “KEEP(*(。init))”,然后保留这些功能,而gc-sections选项清除其他未使用的符号。然后我的程序成功运行而没有任何崩溃。