从目标文件内联函数

Met*_*est 4 c gcc

我想内联一些我没有代码的功能。它们存在于目标文件中。有办法用gcc吗?

换句话说,我想在将自己的代码文件与包含那些功能的目标文件链接时执行这些功能的内联。

Mic*_*urr 5

从4.5版开始,GCC支持-flto开关,该开关可启用链接时间优化(LTO)。LTO可以内联来自单独目标文件的函数。

不过有一个陷阱。由于工作方式的原因-flto,它仅适用于使用该开关编译的目标文件。据我了解,GCC通过将源代码的中间形式放入目标文件中来实现LTO-如果该中间代码不在目标文件中,则该目标文件中的代码将不会被“内联”。

请参阅链接器可以内联功能吗?有关其他更多信息。


Jen*_*edt 2

你想做的恰恰与内联相反。内联意味着您拥有源代码,并且您希望编译器生成代码,就好像该源代码是代替调用者定义的一样。

通过一些努力,也许可以提取目标代码并将其放置在为您的函数新生成的目标代码中。但这没有多大意义:内联的唯一优点是优化器可以跨越函数的边界工作。例如,为了避免寄存器溢出,请进行持续传播或消除死代码。当你只有对象时,这一切几乎是不可能的。