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

时间:2010-12-08 08:15:38

标签: objective-c gcc compiler-construction g++

如果我们编译了一些使用名为lib.a的静态库的源代码,那么lib.a中的内联函数是否可以与其余的二进制文件一起内联?

2 个答案:

答案 0 :(得分:0)

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

在您使用静态库时,静态库已经从源编译为二进制,因此无法进行内联。


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

答案 1 :(得分:0)

好吧,因为为了甚至尝试调用内联函数,它的声明必须在调用站点可见。如果它是inline,则编译器将内联它或完全忽略该请求。

如果您想知道在链接到最终产品时是否也可以内联在库中内联的函数内联...这将取决于实现,并假设它已经能够进行LTO(从那以后)它完成了它到图书馆),它很可能能够再次内联它们。您可能需要使实现包含定义,即使它已在所有位置内联,但所有内容都取决于实现。

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