zhllxt / asio2

Header only c++ network library, based on asio,support tcp,udp,http,websocket,rpc,ssl,icmp,serial_port,socks5.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

可能的头文件冲突问题

laper32 opened this issue · comments

假设, 我有一个项目, 其同样需要使用fmt, spdlog, json等库, 且这些库的版本比当前所使用的版本更新.
那么我们需要做什么以规避可能会出现的头文件冲突问题?
有这个疑问是因为我看include/external/json里面是直接用了那个single header, 但假设我所在的项目也有这个single header, 那么是否会直接出现编译错误?

我们需要做什么以规避可能会出现的头文件冲突问题?

答:
把asio2/3rd/目录下的fmt spdlog 删除,并使用你自己的版本的fmt spdlog即可。实际上在默认情况下,asio2框架只使用了asio2/3rd/asio这一个库,其它的默认情况下并没使用,而且你同样也可以用更高版本的asio来替换asio2/3rd/asio。
当开启ASIO2_ENABLE_LOG宏时,会使用asio2/3rd/spldlog库来记录一些调试日志。
当开启ASIO2_USE_SSL宏时,会使用asio2/3rd/openssl来实现ssl加密。
以上宏默认情况下并未开启。
当使用asio2的rpc相关的功能时,会使用到asio2/3rd/cereal库来做序列化,如果你不需要rpc,你直接删掉cereal都没有问题。
asio2/3rd/fmt库并未使用,只是为了日常工作便利,直接放在了3rd目录下,并在external/fmt.hpp文件中做了其它一些字符串的格式化器。
external/json.hpp这个single header,一是为日常工作便利,二是为了在rpc demo中演示如何使用第三方开源库的类型,如果你不主动包含这个single header,框架本身并不会去包含它使用它。
因此,只要你熟悉头文件包含和依赖的路径等,完全不会出现因头文件冲突导致的编译错误。

的的确确, 如果熟悉就不会出现这种header冲突
但不管怎么说, 我们还是希望能够方便后来者.
这条作为留档, 为后来人做相对应的参考