下载最新的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,国外的标准具体是四舍六入 Math.Round(1.267,2)     //Returns   1.27 参数1是需要处理的值; 参数2是小数点后保留几位   2,中国的标准 Math.Roun ...

  2. Android studio 读取properties文件

    System.out.println(Thread.currentThread().getContextClassLoader().getResource("").getPath( ...

  3. oracle11.0.2 64位版本 Toad连接

    今天重装了系统 oracle  oracle客户端 之前连不上toad 今天总结 客户端路径:E:\app\ruonanxiao-pc\product\11.2.0\client_1 服务端路径:E: ...

  4. centos安装环境准备工作

    我们的centos系统安装好了,并且网络已经连通了,接下来介绍一下,在外网连通的情况下,我们如何安装tar.gz等形式的软件. centos安装后如果想作为正常应用development tools和 ...

  5. Berkeley DB

    最近用BDB写点东西,写了挺多个测试工程.列下表,也理清楚最近的思路 1.测试BDB程序,包括打开增加记录,查询记录,获取所有记录.将数据转存mysql 程序的不足,增加记录仅仅只有key和value ...

  6. php错误收集

    1.Notice: Undefined offset: 1 in F:\www\my\test.php on line 39,原因offset:接下去的数字是出错的数组下标,一般是超出了数组的取值范围 ...

  7. Python脚本控制的WebDriver 常用操作 <二十> 处理表单元素

    测试用例场景 表单对象的操作比较简单,只需要记住下面几点 使用send_keys方法往多行文本框和单行文本框赋值: 使用click方法选择checkbox 使用click方法选择radio 使用cli ...

  8. javascript和jquery 获取触发事件的元素

    一个很简单的问题,却因为大意,经常忘了处理,导致程序运行出错. <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  9. How to use the SQLIOSim utility to simulate SQL Server activity on a disk subsystem

    SQLIOSim是模拟SQLServer的行为来测试IO性能,也可以对损坏磁盘进行一定校验 这是一个SQL Server 2012 安装完后自带的工具 一般在C:\Program Files\Micr ...

  10. 使用IE浏览器下载时候窗口一闪而过

    使用IE浏览器下载东西时,窗口一闪而过,那么这个问题怎么处理呢? 解决办法: 1.按住ctrl键进行下载 2.浏览器>工具>internet选项>安全自定义级别>下载文件自动提 ...