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

问题场景:

开发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;

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

相关推荐
代码栈上的思考1 分钟前
消息队列 BrokerServer 核心逻辑:processConnection 与请求处理全解析
运维·服务器
youyudexiaowangzi6 分钟前
ubuntu 1604安装组件报错
linux·运维·ubuntu
橙露15 分钟前
Docker 实战:镜像瘦身、多阶段构建与最佳实践
运维·docker·容器
muls124 分钟前
java面试宝典
java·linux·服务器·网络·算法·操作系统
斯班奇的好朋友阿法法28 分钟前
ollama离线导入大模型
服务器·前端·javascript
图扑可视化29 分钟前
油气集输 WebGIS 数字孪生管控大屏
运维·gis·数字孪生·油气运输·油气集输
Eric.Lee202142 分钟前
python实现pdf转图片png
linux·python·pdf
CDN36043 分钟前
CDN 无法播放音视频?流媒体回源与 Range 配置修复
运维·音视频
剑锋所指,所向披靡!1 小时前
linux的目录结构
linux·运维·服务器
zt1985q1 小时前
本地部署 Home Assistant 高级自动化 AppDaemon 并实现外部访问
运维·服务器·网络·网络协议·自动化