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

问题场景:

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

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

相关推荐
Shingmc38 小时前
【Linux】进程控制
linux·服务器·算法
视觉装置在笑7139 小时前
Shell 变量基础与进阶知识
linux·运维
Web极客码9 小时前
如何通过命令行工具检查 Linux 版本信息
linux·运维·服务器
Lynnxiaowen9 小时前
今天我们继续学习Kubernetes内容pod资源对象
运维·学习·容器·kubernetes·云计算
欢鸽儿10 小时前
Vitis】Linux 下彻底清除启动界面 Recent Workspaces 历史路径
linux·嵌入式硬件·fpga
繁华似锦respect10 小时前
C++ 智能指针底层实现深度解析
linux·开发语言·c++·设计模式·代理模式
远程软件小帮手10 小时前
云电脑挂机功能上线!边上班摸鱼边游戏多开教程
运维·服务器
hweiyu0011 小时前
Linux 命令:dd
linux
---学无止境---11 小时前
i386 架构中断管理函数详解
linux·架构
cike_y11 小时前
浅谈用docker搭建一个ctf镜像
运维·安全·网络安全·docker·容器·ctf