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

问题场景:

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

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

相关推荐
zandy101132 分钟前
体验家 XMPlus 批量操作与自动化工作流引擎:让大规模运营从手动执行走向规则驱动
大数据·运维·自动化
湿韵轮回1 小时前
LangChain LCEL,用 | 串联AI的魔法语言
服务器·人工智能·langchain
Sagittarius_A*2 小时前
Docker:渗透前置容器化核心基础
运维·安全·docker·容器
网络小白不怕黑2 小时前
监控httpd状态
服务器
代码AC不AC2 小时前
【Linux】线程池
linux·线程池
阿米亚波3 小时前
【EVE-NG 实战】防火墙基础(VLAN · VRRP · NAT · ACL · 静态路由)
运维·网络·笔记·网络协议·计算机网络·网络安全·运维开发
日取其半万世不竭4 小时前
云服务器迁移怎么少停机?DNS 切换前后的完整清单
运维·服务器
FREEDOM_X4 小时前
Linux 多线程编程——总结
java·linux·运维·ubuntu
名字还没想好☜4 小时前
Docker 多阶段构建:把镜像从 1.2GB 砍到 15MB
运维·docker·容器·多阶段构建·镜像优化
祸心依旧4 小时前
Visual Studio 五月更新 —— 计划、评审、优化
运维·人工智能·visual studio