解决添加库的头文件导致编译出的目标文件过大问题

问题场景:

开发spdlog日志功能时,发现将spdlog库中的头文件包含到工程中的某个头文件中,编译出来的可执行文件很大,PC版增加了100多M,arm交叉编译版增加了2M,但是将spdlog库中的头文件包含到工程中的源文件中不会出现这个问题;

原因:暂时不明

解决方法:可以使用前向声明(forward declaration)来解决这个问题。前向声明是一种告诉编译器有关类型但不包含完整定义的方法。在这种情况下,可以在a.h中使用前向声明来告诉编译器关于类b的存在,而不必包含b.h。然后,在a.cpp或其他引用类b的地方,再包含b.h以获得完整定义。

cpp 复制代码
// 在工程的头文件中声明类

namespace spdlog {
    class logger;
}


//定义类对象
std::shared_ptr<spdlog::logger> m_rotating_logger;

然后在源文件中就可以使用这个对象

相关推荐
被制作时长两年半的个人练习生12 小时前
如何调试llama.cpp及判断是否支持RVV
linux·服务器·llama
赖small强12 小时前
【音视频开发】Linux V4L2 (Video for Linux 2) 驱动框架深度解析白皮书
linux·音视频·v4l2·设备节点管理·视频缓冲队列·videobuf2
龙月12 小时前
运维常用基础&进阶命令(持续更新)
运维
四谎真好看12 小时前
Linux 附录二,实验一
linux·运维·服务器·学习笔记
神秘的土鸡12 小时前
Linux中使用Docker构建Nginx容器完整教程
linux·nginx·docker
i***512612 小时前
Failed to restart nginx.service Unit nginx.service not found
运维·nginx
Molesidy12 小时前
【Embedded Development】BootROM的详细分析以及Linux开发板的上电启动流程初步分析
linux
wdfk_prog13 小时前
[Linux]学习笔记系列 -- [block]kyber-iosched
linux·笔记·学习
赖small强13 小时前
【Linux驱动开发】Linux dd 命令详解
linux·dd命令