在Qt 5.3.1 MinGW4.8 环境下使用 UDT

最近的项目需要使用UTD作为网络通信的底层库。之前已经通过Qt,顺利在Linux和Android环境下使用起来,想着应该应该可以用类似的方式修改一下编译器即可,但是做起来才发现里面有不少坑。现在写一下,防止以后忘记。

下面来说一下我做的步骤。

1. src/common.h文件中的pthread_t和pthread_key_t重定义问题。

因为 pthread_t和pthread_key_t在 mingw 4.8中已经有定义了,所以在 src/common.h 重新定义这两个类型时会报错。

#ifdef WIN32
   // Windows compability
   typedef HANDLE pthread_t;
   typedef HANDLE pthread_mutex_t;
   typedef HANDLE pthread_cond_t;
   typedef DWORD pthread_key_t;
#endif
这里只需要在全文中搜索 pthread_t 和 pthread_key_t 将其替换个名字即可。我就将pthread_t 替换成pthread_t_vae,将替换成pthread_key_t_vae。


2.src/udt.h存在导入导出库环境的问题。

我用UDT的时候比较偷懒,没有将其导出成库,而仅仅只是将源文件导入到我的Qt工程里。在Linux中没什么问题,但是到了windows里就有问题了。

在 src/udt.h的84-88行存在如下定义:

#ifdef UDT_EXPORTS
    #define UDT_API __declspec(dllexport)
#else
    #define UDT_API __declspec(dllimport)
#endif
这个定义将会导致我无法给  class UDT_API CUDTException中的静态常量赋值。因为#define UDT_API __declspec(dllimport)的定义说明这个类是从外部导入的,但是我的代码是直接使用的源码,所以仅需把这个宏定义成空即可。

      #ifdef UDT_EXPORTS
         //#define UDT_API __declspec(dllexport)
         #define UDT_API
      #else
         //#define UDT_API __declspec(dllimport)
         #define UDT_API
      #endif


3.windows 网络编程库。

在windows进行网络编程时,需要在加入相关的库。在Qt中加入库的方式比较简单,直接在Pro文件中加入如下定义即可。

win32-g++{
DEFINES += __MINGW__
LIBS += -lwsock32
LIBS += -lws2_32
CONFIG += qwt
include ( C:\Users\vae\work\build\libs\qwt\Qt5.3.1-pc-static\qwt-6.1.0\qwt.prf )
}
Ps:如果只使用UDT就只需要加入LIBS的内容就可以了,我还使用了qwt,所以有qwt的相关内容。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值