从目标文件内联函数

我想内联一些我没有代码的函数。 它们存在于目标文件中。 有没有办法用gcc做到这一点?

换句话说,我希望在将我自己的代码文件与包含这些函数的目标文件链接时执行这些函数的内联。

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

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

请参阅链接器内联函数吗? 了解一些其他细节。

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

或许可以做的是提取目标代码并将其放在新生成的函数对象代码中。 但这没有多大意义:内联的唯一优势是优化器可以跨越函数的边界。 例如,为避免寄存器溢出,请不断传播或消除死代码。 当你只拥有这个物体时,这几乎是不可能的。