Windows compiler Libevent

Source: Internet
Author: User
Tags lstat

Download the latest libevent, currently

Libevent-2.0.21-stable.tar.gz

Modify "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 "Three files, add one line at the beginning of the file:

#define _WIN32_WINNT 0x0500

Add the/ZI option to the cflags in Makefile.nmake and remove the/ox optimization option so that the generated Lib library will have debug information

Enter the VS2010 command prompt

Switch to the directory where Libevent is located

nmake/f Makefile.nmake

Compile successful Build

Libevent.lib, Libevent_core.lib, Libevent_extras.lib

Copy include and 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\

Create a new VS2010 console project and use the following code

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 6667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611 7118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 // 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>staticvoidfifo_read(intfd, short event, void*arg){charbuf[255];intlen;structevent *ev = (structevent *)arg;#ifdef WIN32DWORDdwBytesRead;#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 WIN32len = 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‘;#elselen = read(fd, buf, sizeof(buf) - 1);if(len == -1) {perror("read");return;elseif(len == 0) {fprintf(stderr, "Connection closed\n");return;}buf[len] = ‘\0‘;#endiffprintf(stdout, "Read: %s\n", buf);}intmain(intargc, char**argv){structevent evfifo;#ifdef WIN32HANDLEsocket;/* 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)return1;#elsestructstat st;constchar*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 __linuxsocket = open(fifo, O_RDWR | O_NONBLOCK, 0);#elsesocket = open(fifo, O_RDONLY | O_NONBLOCK, 0);#endifif(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 WIN32event_set(&evfifo, (int)socket, EV_READ, fifo_read, &evfifo);#elseevent_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 WIN32CloseHandle(socket);#endifreturn(0);}

Go to Configuration Manager, set the active item to release

C + + General \ Additional Include directories. \include;. \include\event2

Code generation \ Runtime Multithreading (/MT)
Advanced \ Compile to compile to C code (/TC)

Linker

General \ Additional Library directory. \libs
Input \ Additional Dependencies ws2_32.lib;wsock32.lib;libevent.lib;libevent_core.lib;libevent_extras.lib;% ( Additionaldependencies)
Enter \ Ignore specific default library libc.lib;msvcrt.lib;libcd.lib;libcmtd.lib;msvcrtd.lib;% ( Ignorespecificdefaultlibraries)

haven2002 annotations: No need to ignore or nothing.

Under the Include folder, you can include the Event2 folder and a bunch of. h files. Using the above command, copy a bunch of useless things.

Windows compiler Libevent

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.