下载最新的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文件即可。用上面的命令,复制了一堆没用的东西。

windows下编译Libevent的更多相关文章

  1. windows下编译libevent(2.1.8)及使用

    一:获取libevent github地址:https://github.com/libevent/libevent/releases 下载2.1.8稳定版 二:编译libevent 我是用的visu ...

  2. [转] Windows下编译OpenSSL

    简述 OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用.对于一般的开发人 ...

  3. Windows下编译objective-C

    Windows下编译objective-C 2011-08-31 14:32 630人阅读 评论(0) 收藏 举报 windowscocoa工具objective clibraryxcode   目录 ...

  4. 在Windows下编译FFmpeg详细说明

    MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU F ...

  5. 如何在WINDOWS下编译BOOST C++库 .

    如何在WINDOWS下编译BOOST C++库 cheungmine 2008-6-25   写出来,怕自己以后忘记了,也为初学者参考.使用VC8.0和boost1.35.0.   1)下载boost ...

  6. 在Windows下编译OpenSSL(VS2005和VC6)

    需要说明的是请一定安装openssl-0.9.8a .  openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装Activ ...

  7. windows下编译java源文件的编码错误

    import java.util.Arrays;public class ArrayAsAReference{ public static void main(String[] args) { int ...

  8. Windows下编译SDL

    Windows下编译SDL的理由我就不多说了,无论用VS来编译或调试SDL库都是很方便的.而且SDL源代码中也包含了VC工程,你所要做的只是解压VC工程,进行适当的配置,然后编译.调试. 编译SDL大 ...

  9. Windows下编译安装 FFmpeg

    在Linux/Mac下编译 ffmpeg是非常方便的.但要在 Windows下编译 ffmpeg还真要花点时间.以下就是在 Windowns下编译ffmpeg的步骤: 一.安装Cygwin 在wind ...

随机推荐

  1. 【学习笔记】【C语言】常量

    1. 什么是常量 常量,表示一些固定的数据 2. 常量的分类 1> 整型常量(int) 包括了所有的整数,比如6.27.109.256.-10.0.-289等 2> 浮点型常量(float ...

  2. 20141017--类型String类

    Console.Write("请输入您的身份证号"); string x=Console.ReadLine();//小string是大String的快捷方式 int i = x.L ...

  3. hdu 1879 继续畅通工程

    /************************************************************************/ /* hdu 1879 继续畅通工程 Time L ...

  4. 洛谷 P2670 扫雷游戏==Codevs 5129 扫雷游戏

    题目描述 扫雷游戏是一款十分经典的单机小游戏.在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有 ...

  5. 如何判断一个js对象是不是Array

    1. instance of 2.constructor 3. isArray 1.var a=new Array(); a instanceof Array; //true 2.var a=new ...

  6. iOS界面布局设计

    参考资料: 1. 谈谈如何学习ios 8的界面和布局设计 2. iOS 8 Auto Layout界面布局系列 3. 为iPhone 6设计自适应布局 4. 几张图弄明白iOS布局中的尺寸问题

  7. C#使用SocketAsyncEventArgs操作套接字的简单异步通讯

    SocketAsyncEventArgs是一个套接字操作的类,主要作用是实现socket消息的异步接收和发送,跟Socket的BeginSend和 BeginReceive方法异步处理没有多大区别,它 ...

  8. Assembly(程序集) 反射和缓存

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. git服务器简易搭建法

    受尽svn各种折磨的小伙伴都听说过git. 但是网上一搜索, 本来打算跟svn一样. 下一个服务器, 装下就可以开始用了. 没想到啊, 没想到. 居然需要Linux天赋点… 好吧, 拜鸟哥门下把Lin ...

  10. How to achieve dialog with lookup control

    How to create a dialog with the lookup as a control, the other control SalesId ItemId lookup is the ...