c++ - GCC 可以从静态库中内联函数吗?
问题描述
我正在制作一个可以从内联函数中受益匪浅的库,但它相当大,我决定将它编译为静态库,而不仅仅是预编译的头文件。在使用该库的代码中,如何使 GCC 从静态库中内联代码(粘贴在调用代码中,而不是链接和调用它)(这甚至可能)?
解决方案
是的,在启用链接时优化的情况下,现代 C++ 工具链能够内联函数,即使它们不是内联函数(并且在调用发生的翻译单元中不知道它们的定义)。在 GCC 中,您可以通过-flto
选项。基本上,这些通常的工作方式是编译器在编译您的源代码时,不仅会直接发出目标代码,还会将代码的内部表示写入目标文件。链接时,编译器不会简单地链接目标代码,而是基本上重新运行整个程序的内部表示的代码生成,就好像它是写在一个大源文件中一样。这会大大增加构建程序所需的时间。但它允许一些重要的优化,例如内联甚至跨翻译单元边界发生......
静态库只是目标文件的存档,因此如果您在启用 LTO 的情况下构建库并将调用代码链接到它,编译器将能够将函数直接内联到调用代码中。请注意,归根结底,是否内联仍由编译器决定,因此不能保证函数一定会内联……</p>
推荐阅读
- azure - 选择标准负载均衡器
- azure-blob-storage - 保存 Azure blob 连接器的逻辑应用标准问题
- javascript - API JSON 数据导入 Google Sheets (JS)
- php - php isset() 无法与 filter_var() 一起正常工作
- android - 在弹出窗口中定位滚动视图
- javascript - 如何获取位于其他对象内部的对象的值
- assembly - Qualcomm Hexagon:矢量内存负载内在?
- python - ModuleNotFoundError:没有名为“dash.html”的模块
- java - 如何将 HashMap 转换为具有特定格式的字符串?(JAVA)
- blockchain - 入驻是什么意思?