Objective c gcc静态链接器能否正确地内联静态库中的函数?

Objective c gcc静态链接器能否正确地内联静态库中的函数?,objective-c,gcc,compiler-construction,g++,Objective C,Gcc,Compiler Construction,G++,如果我们编译了大量使用名为lib.a的静态库的源代码,lib.a中的内联函数会与其余二进制文件正确内联吗?不会。内联是解析树上的操作,需要访问内联代码的主机源和施主源的源代码 静态库在您使用时已经从源代码编译成二进制,因此无法进行内联 然而,没有内联的代码也是“正确的”,并且可以正常运行(假设它被编译到静态库中)。好吧,因为为了尝试调用内联函数,它的声明必须在调用站点可见。如果它是内联的,那么编译器要么内联它,要么完全忽略该请求 如果您想知道,当您链接到最终产品时,库中内联的未声明内联的函数是

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

不会。内联是解析树上的操作,需要访问内联代码的主机源和施主源的源代码

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



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

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

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


嗨,亚历克斯,这也是我的怀疑。你能为你的索赔提供一些参考吗?一般来说,我应该在哪里查找这些信息?除非情况不寻常,否则要求提供参考以支持否定性索赔是不合理的。