转载于:www.acodelife.cn
背景:
想使用Qt Creator 编写libevent小型服务器。使用libevent,添加源码的方式,修改的比较大,所以直接把libevent编译成库使用。
因为Qt Creator自带的MinGW编译器,所以需要使用MinGW编译器编译libevent。
准备与介绍:
MSYS,Minimal GNU(POSIX)system on Window,是一个小型GNU环境,包括基本的bash,make等等。与Cygwin大致相当。MSYS是Windows下最优秀的GNU环境。
MSYS不是一个操作系统,而是一个通过将linux源代码在Win32上编译而成的UNIX工作环境。
MinGW:即Minimalist GNU for Windows。它是一些头文件和函数库的集合,该集合允许人们在没有第三方动态链接库的情况下使用GCC(GNU Compiler C)产生Win32程序。
MinGW主要由GNU binary utilities、GCC和GDB组成。同时还包括一些必要的库,例如libc(C Runtime),及专门用于Win32环境的API接口库。如果你想学习linux环境下的编程,而又不想装linux,那你就装一个MinGW吧。
下载安装MSYS-1.0.11,安装后将C:\msys\1.0\etc中的fstab.sample文件重命名为fstab。并讲fstab中内容c:/mingw /mingw 改为C:/Qt/Qt5.7.0/Tools/mingw530_32/ /mingw
其中C:/Qt/Qt5.7.0/Tools/mingw530_32/为MinGW的目录,如图:
打开MSYS ,cd到libevent目录
分别执行:./configure,make,make install ,编译成功后,在C:\msys\1.0\local可以看到头文件,编译成功的库
把三个文件夹放入新建的Qt工程目录libevent下,
修改Qt工程的.pro文件:
INCLUDEPATH += $$PWD/libevent/include
LIBS += $$PWD/libevent/lib/libevent.a \
$$PWD/libevent/lib/libevent_core.a \
$$PWD/libevent/lib/libevent_extra.a \
LIBS += -lWs2_32
DEFINES += WIN32
注意:在libevent例子中,并没有以下代码
WSAData data;
WSAStartup(MAKEWORD(2,2),&data);
初始化socket
需要自己的添加,不然在创建socket的时候,总是弹出assert
测试文件:
void TcpServer::StartTcpServer()
{
#ifdef WIN32
WSAData wsaData;
WSAStartup(MAKEWORD(2, 0), &wsaData);
#endif
struct sockaddr_in sin;
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(PORT);
struct evconnlistener *listener;
struct event_base *base = event_base_new();
if (!base)
{
printf("Could not initialize libevent\n");
//return 1;
}
// listener = evconnlistener_new_bind(base, listener_cb, (void *)base,
// LEV_OPT_REUSEABLE|LEV_OPT_CLOSE_ON_FREE, -1,
// (struct sockaddr*)&sin,
// sizeof(sin));
// if (!listener)
// {
// printf("Could not create a listener\n");
// return 1;
// }
// event_base_dispatch(base);
// evconnlistener_free(listener);
// event_base_free(base);
}
转载于:www.acodelife.cn