下载最新的libevent,目前是
libevent-2.0.21-stable.tar.gz
修改“D:\libevent-2.0.21-stable\event_iocp.c”、“D:\libevent-2.0.21-stable \evthread_win32.c”、“D:\libevent-2.0.21-stable\listener.c”三个文件,在文件开头分别加上一 行:
#define _WIN32_WINNT 0x0500
在Makefile.nmake中的CFLAGS中加入/ZI选项,同时去掉/Ox优化选项,这样生成的lib库会带有调试信息
进入VS2010命令提示
切换到libevent的所在目录
nmake /f Makefile.nmake
编译成功生成
libevent.lib、libevent_core.lib、libevent_extras.lib
复制include 和libs
mkdir D:\libevent\include\
xcopy /E /H /R D:\libevent-2.0.21-stable\include\* D:\libevent\include\
xcopy /E /H /R D:\libevent-2.0.21-stable\WIN32-Code\* D:\libevent\include\
xcopy /E /H /R D:\libevent-2.0.21-stable\*.h D:\libevent\include\
mkdir d:\libevent\libs
copy D:\libevent-2.0.21-stable\*.lib D:\libevent\libs\
新建vs2010控制台项目并使用以下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
// libeventTest.cpp : Defines the entry point for the console application. // #include "stdafx.h" /* * XXX This sample code was once meant to show how to use the basic Libevent
* interfaces, but it never worked on non-Unix platforms, and some of the
* interfaces have changed since it was first written. It should probably
* be removed or replaced with something better.
*
* Compile with:
* cc -I/usr/local/include -o event-test event-test.c -L/usr/local/lib -levent
*/
#include <event2/event-config.h> #include <sys/types.h> #include <sys/stat.h> #ifndef WIN32 #include <sys/queue.h> #include <unistd.h> #include <sys/time.h> #else #include <winsock2.h> #include <windows.h> #endif #include <fcntl.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <event.h> static void
fifo_read( int fd, short event, void *arg)
{ char buf[255];
int len;
struct event *ev = ( struct event *)arg;
#ifdef WIN32 DWORD dwBytesRead;
#endif /* Reschedule this event */ event_add(ev, NULL); fprintf (stderr, "fifo_read called with fd: %d, event: %d, arg: %p\n" ,
fd, event, arg); #ifdef WIN32 len = ReadFile(( HANDLE )fd, buf, sizeof (buf) - 1, &dwBytesRead, NULL);
/* Check for end of file. */ if (len && dwBytesRead == 0) {
fprintf (stderr, "End Of File" );
event_del(ev); return ;
} buf[dwBytesRead] = ‘\0‘ ;
#else len = read(fd, buf, sizeof (buf) - 1);
if (len == -1) {
perror ( "read" );
return ;
} else if (len == 0) {
fprintf (stderr, "Connection closed\n" );
return ;
} buf[len] = ‘\0‘ ;
#endif fprintf (stdout, "Read: %s\n" , buf);
} int main( int argc, char **argv)
{ struct event evfifo;
#ifdef WIN32 HANDLE socket;
/* Open a file. */ socket = CreateFileA( "test.txt" , /* open File */
GENERIC_READ, /* open for reading */
0, /* do not share */
NULL, /* no security */
OPEN_EXISTING, /* existing file only */
FILE_ATTRIBUTE_NORMAL, /* normal file */
NULL); /* no attr. template */
if (socket == INVALID_HANDLE_VALUE)
return 1;
#else struct stat st;
const char *fifo = "event.fifo" ;
int socket;
if (lstat(fifo, &st) == 0) {
if ((st.st_mode & S_IFMT) == S_IFREG) {
errno = EEXIST;
perror ( "lstat" );
exit (1);
} } unlink(fifo); if (mkfifo(fifo, 0600) == -1) {
perror ( "mkfifo" );
exit (1);
} /* Linux pipes are broken, we need O_RDWR instead of O_RDONLY */ #ifdef __linux socket = open(fifo, O_RDWR | O_NONBLOCK, 0); #else socket = open(fifo, O_RDONLY | O_NONBLOCK, 0); #endif if (socket == -1) {
perror ( "open" );
exit (1);
} fprintf (stderr, "Write data to %s\n" , fifo);
#endif /* Initalize the event library */ event_init(); /* Initalize one event */ #ifdef WIN32 event_set(&evfifo, ( int )socket, EV_READ, fifo_read, &evfifo);
#else event_set(&evfifo, socket, EV_READ, fifo_read, &evfifo); #endif /* Add it to the active events, without a timeout */ event_add(&evfifo, NULL); event_dispatch(); #ifdef WIN32 CloseHandle(socket); #endif return (0);
} |
进入配置管理器,设置活动项目为release
C++常规\附加包含目录 .\include;.\include\event2
代码生成\运行库 多线程 (/MT)
高级\编译为 编译为 C 代码 (/TC)
链接器
常规\附加库目录 .\libs
输入\附加依赖项 ws2_32.lib;wsock32.lib;libevent.lib;libevent_core.lib;libevent_extras.lib;%(AdditionalDependencies)
输入\忽略特定默认库 libc.lib;msvcrt.lib;libcd.lib;libcmtd.lib;msvcrtd.lib;%(IgnoreSpecificDefaultLibraries)
haven2002标注:不用忽略也没事
include文件夹下面,包含event2文件夹和一堆.h文件即可。用上面的命令,复制了一堆没用的东西。