我想内联一些我没有代码的函数。它们存在于目标文件中。有没有办法用gcc做到这一点?
换句话说,我希望在将我自己的代码文件与包含这些函数的目标文件链接时执行这些函数的内联。
答案 0 :(得分:5)
从4.5版开始,GCC支持-flto开关,该开关启用链路时间优化(LTO)。 LTO可以从单独的目标文件内联函数。
虽然有一个问题。由于-flto
的工作方式,它只适用于使用该开关编译的目标文件。据我了解,GCC通过将源代码的中间形式放入目标文件来实现LTO - 如果该中间代码不在目标文件中,则该目标文件中的代码将不会被“内联”。
有关其他详细信息,请参阅Can the linker inline functions?。
答案 1 :(得分:2)
你想要做的只是内联的反面。内联意味着您拥有源,并且您希望编译器生成代码,就像定义了源代替调用者一样。
可能需要付出的努力就是提取目标代码并将其放在新生成的函数对象代码中。但这没有太大意义:内联的唯一优势是优化器可以跨越函数的边界。例如,为了避免寄存器溢出,不断传播或消除死代码。当你只拥有这个物体时,这几乎是不可能的。