gcc 静态链接器可以正确内联静态库中的函数吗?

问题描述 投票:0回答:2

如果我们编译许多使用名为 lib.a 的静态库的源代码,lib.a 中的内联函数是否会与其余二进制文件正确内联?

objective-c gcc g++ inline-functions
2个回答
0
投票

不,他们不会。 内联是对解析树的操作,需要访问内联代码的宿主源和捐赠者源的源代码。

静态库在您使用它们时已经从源代码编译为二进制文件,因此不会发生内联。


但是,未内联的代码也是“正确的”并且可以正常运行(假设它完全被编译到静态库中)。


0
投票

好吧,因为为了尝试调用内联函数,它的声明必须在调用站点可见。 如果是,则

inline
那么编译器将内联它或完全忽略该请求。

如果您想知道在库中内联的未声明内联的函数是否也可以在链接到最终产品时内联...这将取决于实现,并且假设它已经能够进行 LTO(因为它确实做到了)它到库),它很可能能够再次内联它们。 您可能需要使实现包含定义,即使它已在各处内联……一切都取决于实现。

http://crazyeddiecpp.blogspot.com/2010/12/inline-functions-and-you.html

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.