引入spdlog后程序链接很慢
最近在开发嵌入式应用程序,其中的日志模块经技术选型,采用了大名鼎鼎的spdlog。本来想着这个第三方库网上资料很多,集成到程序中,应该比较容易。
生成应用程序很慢
程序加了很多功能模块之后,突然发现生成应用程序很慢,哪怕是只增加了一行代码,在IDE的输出中看到只重编了一个cpp文件,最后链接生成花了近4分钟。这个有点莫名其妙,但是代码功能也加了好几个模块了,一时拿不定主意,到底是哪个模块影响了,经过不断地移除模块,最后定位是引入spdlog后,生成应用程序就显著变慢。
header-only与lib
网上很多文章都介绍,spdlog是header-only的第三方库,也就是说只用把头文件引入工程即可,很方便。确实如此,结合网上大量的资料,很快就能生成日志文件了,简直不要太爽。
但是他们却没有告诉你,这样其实每次编译都要重新编译链接这个spdlog相关文件,功能这么强大,齐全的日志模块,编译链接花些时间,也是正常的,但是这也太影响调试了,每次都要修改代码。
MingW编译spdlog lib库
在网上搜索spdlog编译lib库,资料就少多了。而且我查到的资料都是MSVC编译的,而我用的是MingW编译器啊,我可不想去按照VS2022这个庞然大物。
我直接用QtCreator打开spdlog的CMakeListes.txt文件,轻轻地点击编译,spdlib.a就生成了。
SPDLOG_COMPILED_LIB
编译库还是很顺利的,但是项目如任何知道你是用header-only还是lib的形式使用spdlog呢,就得在CMakeListes.txt文件中加入 target_compile_definitions(hmApp PUBLIC SPDLOG_COMPILED_LIB)
至于后面就是CMakeListes.txt文件中正常的引入spdlib.a了,然后再修改代码编译发现,这次生成应用程序快多了。
总结
又到了总结时间了,要命的问题很多 ,但是命只有一条。在解决了这个问题之后,以后就明白了header-only不是银弹,合适的才是最好的。