【发布时间】:2015-06-05 13:34:40
【问题描述】:
如果我定义了一个函数但不调用它,函数将不会以可执行文件的形式呈现。但是有些情况我们需要告诉链接器不要排除一个函数。例如,我定义了应该由totalview 调试器在调试时调用的函数。
如果我从某个地方(例如从 main 函数)调用该函数,问题将得到解决,它不会被排除,但是否有一般规则告诉链接器不要排除某个函数?
【问题讨论】:
-
我想您要的是 GCC/ld,但您应该在问题中提及它。
-
这不是重复的,因为这个问题涉及链接器而不是编译器的删除。
-
听起来你需要一个链接器脚本。在那里,您可以更详细地定义链接器应包含在结果中的内容。
-
听起来您或您的发行版已设置默认 GCC 标志以删除未使用的代码或使用 LTO 编译。通常 GCC 不会告诉链接器删除未使用的函数。要打开它,您通常需要使用 -ffunction-sections 和链接器选项 --gc-sections