实例化内联类方法

时间:2015-07-07 14:37:58

标签: c++11 gcc shared-libraries inline

我写了一个库,这个库包含一个函数void f()这个函数是一行函数,当我用-O3 gcc优化标志将库编译成共享对象时,它是内联的。我把它称为代码中的一个关键位置(必须尽可能快),我不想把它称为内联(性能大幅下降)。问题是这个函数是我的库公开的API的一部分,所以当库用户链接到我的库并调用这个函数时,它们会得到未定义的引用链接错误。有没有办法让我的代码使用内联函数,但仍然在对象文件中实例化它,以便库用户能够链接和使用它? (当我说“在目标文件中实例化它”时,我的意思是当我在共享对象上运行objdump -t时,我希望看到它。为了说清楚,我对用函数

包装它的解决方案不感兴趣
void F() __attribute__((noinline)) { f(); }

因为我有很多这样的功能,而且我不想为每个功能保留一份副本,因为它有大量的开销。我正在寻找一种方法来告诉编译器在定义可用时使用内联,但仍然在对象文件中实例化该函数,因此库用户也可以链接到它。

0 个答案:

没有答案