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

问题场景:

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

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

相关推荐
柏木乃一7 小时前
Linux进程信号(2):信号产生part2
linux·运维·服务器·c++·信号处理·信号·异常
马丁的代码日记7 小时前
Docker 无法拉取镜像的解决方案
运维·docker·容器
是小王吖!8 小时前
容器技术 - docker
运维·docker·容器
FJW0208148 小时前
《Nginx 高级应用:变量、Rewrite、反向代理与 OpenResty 扩展》(3)
运维·nginx·openresty
小义_8 小时前
【RH134知识点问答题】第13章 运行容器
linux·云原生
feng68_8 小时前
LVS(linuxvirtualserver)
运维·服务器·lvs
q***76569 小时前
ubuntu 安装 Redis
linux·redis·ubuntu
云道轩9 小时前
在Rocky Linux 上在线安装OpenClaw 2026.2.13
linux·运维·人工智能·智能体·openclaw
zl_dfq9 小时前
Linux 之 【多线程】(STL、智能指针与线程安全、读者写者问题)
linux
mqffc10 小时前
Linux(CentOS)安装 MySQL
linux·mysql·centos