一、注意点
-
要灵活运用宏定义,来区分linux及windows下的不同内容。尤其要注意,
#ifdef
和#ifndef
的区别,#ifdef
是if define的缩写,而#ifndef
是if not define的缩写。举例说明。#ifdef WIN32 //指的是当可以运行windows架构时 #ifndef WIN32 //指的是当不可以运行windows架构时
-
在linux和windows中关于网络编程所调用的函数库是不同的。具体如下:
#ifndef WIN32 //linux架构下调用的内容 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #else //window架构下调用的内容 #ifdef __MINGW__ #include <stdint.h> #include <ws2tcpip.h> #endif #include <windows.h> #endif
二、修改内容
-
修改.pro文件。修改当windows架构时,添加第三方库
win32 { LIBS += -lwsock32 LIBS += -lws2_32 }
-
修改common.h文件。pthread_t定义的句柄。原来是
#ifdef WIN32 // Windows compability typedef HANDLE pthread_t; typedef HANDLE pthread_mutex_t; typedef HANDLE pthread_cond_t; typedef DWORD pthread_key_t; #endif
修改为:
#ifdef WIN32 // Windows compability typedef HANDLE pthread_t_udt; typedef HANDLE pthread_mutex_t; typedef HANDLE pthread_cond_t; typedef DWORD pthread_key_t_udt; #endif
-
修改api.h文件。原来是
pthread_t m_GCThread; #ifndef WIN32 static void* garbageCollect(void*); #else static DWORD WINAPI garbageCollect(LPVOID); #endif
修改为:
#ifndef WIN32 static void* garbageCollect(void*); pthread_t m_GCThread; #else static DWORD WINAPI garbageCollect(LPVOID); pthread_t_udt m_GCThread; #endif
-
修改queue.h文件。原来为
#ifndef WIN32 static void* worker(void* param); #else static DWORD WINAPI worker(LPVOID param); #endif pthread_t m_WorkerThread;
修改为:
#ifndef WIN32 static void* worker(void* param); pthread_t m_WorkerThread; #else static DWORD WINAPI worker(LPVOID param); pthread_t_udt m_WorkerThread; #endif
注意,在这个头文件中,有两处一模一样的需要修改的内容,即上述内容。
-
修改udt.h文件。原来是
#else #define UDT_API __declspec(dllimport) #endif
修改为:
#else #define UDT_API #endif