gpt4 book ai didi

c++ - GCC 可以从静态库中内联函数吗?

转载 作者:行者123 更新时间:2023-11-30 02:15:33 24 4
gpt4 key购买 nike

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

最佳答案

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

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

关于c++ - GCC 可以从静态库中内联函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56068550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com