asio2 icon indicating copy to clipboard operation
asio2 copied to clipboard

可能的头文件冲突问题

Open laper32 opened this issue 2 years ago • 5 comments

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

laper32 avatar Sep 18 '22 10:09 laper32

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

答: 把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,框架本身并不会去包含它使用它。 因此,只要你熟悉头文件包含和依赖的路径等,完全不会出现因头文件冲突导致的编译错误。

zhllxt avatar Sep 19 '22 01:09 zhllxt

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

laper32 avatar Sep 19 '22 02:09 laper32

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

答: 把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,框架本身并不会去包含它使用它。 因此,只要你熟悉头文件包含和依赖的路径等,完全不会出现因头文件冲突导致的编译错误。

非常赞 解决了我的疑惑和唯一的顾虑

luodaoyi avatar Sep 10 '23 10:09 luodaoyi

还有一个办法,比如我使用了spdlog库,为了避免冲突,先引入spdlog的头文件,再引入asio2,如下:

target_include_directories(${PROJECT_NAME} PRIVATE
        "${CMAKE_SOURCE_DIR}/lib/spdlog/include"
        "${CMAKE_SOURCE_DIR}/lib/asio2/include"
        "${CMAKE_SOURCE_DIR}/lib/asio2/3rd"
)

BunnySakura avatar May 28 '24 14:05 BunnySakura

还有一个办法,用xmake,里面的包已经处理好了,不存在冲突的问题

heheda123123 avatar Jun 19 '24 03:06 heheda123123