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

时间:2019-05-09 22:48:23

标签: c++ gcc

我正在创建一个库,该函数将从内联函数中受益很多,但是它很大,因此我决定将其编译为静态库,而不仅仅是预编译的头文件。在使用该库的代码中,如何使GCC从静态库内联代码(粘贴在调用代码中,而不是链接和调用它)(甚至可能)?

1 个答案:

答案 0 :(得分:3)

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

静态库只是目标文件的存档,因此,如果您在启用LTO的情况下构建库并针对它链接调用代码,则编译器将能够直接将函数内联到调用代码中。请注意,最终还是要由编译器来决定是否进行内联,因此不能保证一定可以内联函数。