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

问题场景:

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

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

相关推荐
sulikey8 小时前
ext2 GDT 块组描述符表 详细技术拆解
linux·操作系统·文件系统·ext2·gdt·ext·块组描述符
QuestLab8 小时前
Ollama在Linux上安装的详细记录
linux·运维·服务器
Strugglingler8 小时前
【Linux PL011驱动支持RS485】
linux·uart·rs485·pl011
IT瑞先生9 小时前
Linux系统基础
linux·运维·服务器
modelmd9 小时前
Linux chroot命令
linux
l1t9 小时前
在WSL的ubuntu 26.04容器中用deb安装包安装使用redrock-4.1-1
linux·运维·ubuntu·postgresql
jieyucx9 小时前
Go语言通透教程:结构体定义与方法
服务器·数据库·golang·结构体
renren-1009 小时前
centos7.9 升级openssl11 导致的系统命令瘫痪
linux·运维·服务器
金玉满堂@bj9 小时前
Pytest 完整使用教程
运维·服务器·pytest
SWAGGY..9 小时前
Linux系统编程:(六)编译器gcc/g++
linux·运维·服务器