GCC 可以内联静态库中的函数吗?

Vla*_*rov 6 c++ gcc

我正在制作一个库,该库将从内联其函数中受益匪浅,但它相当大,我决定将其编译为静态库,而不仅仅是预编译头。在使用该库的代码中,如何使 GCC 从静态库内联代码(粘贴调用代码而不是链接和调用它)(这是否可能)?

Mic*_*zel 6

是的,在启用链接时优化的情况下构建时,现代 C++ 工具链能够内联函数,即使它们不是内联函数(并且在调用发生的翻译单元中不知道它们的定义)。在 GCC 中,您可以通过选项启用 LTO -flto。基本上,这些通常的工作方式是编译器在编译源代码时不仅会直接生成目标代码,还会将代码的内部表示写入目标文件中。链接时,编译器不是简单地链接目标代码,而是基本上根据整个程序的内部表示重新运行代码生成,就好像它是在一个大源文件中编写的一样。这会大大增加构建程序所需的时间。但它允许一些重要的优化,例如跨翻译单元边界进行内联......

\n\n

静态库只是目标文件的存档,因此如果您在启用 LTO 的情况下构建库并将调用代码链接到它,编译器将能够将函数直接内联到调用代码中。请注意,最终,仍然由编译器决定是否内联,因此不能保证函数一定会被内联\xe2\x80\xa6

\n