我写了一个库,这个库包含一个函数void f()
这个函数是一行函数,当我用-O3 gcc优化标志将库编译成共享对象时,它是内联的。我把它称为代码中的一个关键位置(必须尽可能快),我不想把它称为内联(性能大幅下降)。问题是这个函数是我的库公开的API的一部分,所以当库用户链接到我的库并调用这个函数时,它们会得到未定义的引用链接错误。有没有办法让我的代码使用内联函数,但仍然在对象文件中实例化它,以便库用户能够链接和使用它? (当我说“在目标文件中实例化它”时,我的意思是当我在共享对象上运行objdump -t
时,我希望看到它。为了说清楚,我对用函数
void F() __attribute__((noinline)) { f(); }
因为我有很多这样的功能,而且我不想为每个功能保留一份副本,因为它有大量的开销。我正在寻找一种方法来告诉编译器在定义可用时使用内联,但仍然在对象文件中实例化该函数,因此库用户也可以链接到它。