最近使用boost::asio的udp做项目,项目本身使用的是Qt的框架,Qt中也有QUdpSocket,但是在使用过程中,多线程有一些问题,就打算使用boost::asio中的udp,于是就把asio包含进项目,有下面几个问题,
-
首先是编译过程中直接警告:
这个警告好解决,意思就是让你根据目标系统预定义一个宏:
Windows 7,你就定义
_WIN32_WINNT=0x0601
Windows 10,你就定义_WIN32_WINNT=0x0A00
Visual Studio2017怎么搞呢?项目属性->C/C++->预处理器->预处理器定义,如下图所示:
- 如果你的项目中使用了
signals, slots, and emit
,那不好意思,跟boost中的库有些冲突了(目前我看到的是emit
冲突)
会直接编译报错。
怎么解决呢?Qt文档中已经提到这一点了https://doc.qt.io/qt-6/signalsandslots.html,具体如下:
什么意思呢?就是说如果这些signals, slots, and emit
宏跟第三方库冲突了,你可以加个no_keywords
,然后把你使用的signals, slots, and emit
改成Q_SIGNALS (or Q_SIGNAL), Q_SLOTS (or Q_SLOT), and Q_EMIT。
经测试,不用加no_keywords
,直接使用Q_EMIT
即可!
经测试,可以只在预处理定义那里添加QT_NO_EMIT
即可!