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

问题场景:

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

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

相关推荐
凌寒111 天前
Linux(Debain)安装Redis、数据迁移
linux·运维·服务器·redis
7***q6081 天前
在linux(Centos)中Mysql的端口修改保姆级教程
linux·mysql·centos
云渠道商yunshuguoji1 天前
亚马逊云渠道商:怎么使用Spot实例实现成本降低70%?
运维·架构
2501_921939261 天前
11.25Nginx服务器和Wordpress服务器
运维·服务器·nginx
用户476022022781 天前
机器配置免密切root
linux
dntktop1 天前
搜索+计算+插件…这个“全能管家”让你告别80%的桌面图标
运维·windows·自动化·编辑器
ALex_zry1 天前
Consul全方位入门指南:第二阶段—— 实操。Consul核心功能与项目集成
运维·docker·微服务·云原生·架构
wanhengidc1 天前
云手机中分布式存储的功能
运维·服务器·分布式·游戏·智能手机·云计算
上班日常摸鱼1 天前
防火墙高级配置完整教程:端口映射+访问控制策略+iptables规则编写
运维
翼龙云_cloud1 天前
亚马逊云渠道商:AWS Shield和传统防火墙怎么选?
运维·服务器·云计算·aws