总结libevent安装方法

转载 2015年07月08日 22:05:29

from:

http://blog.sina.com.cn/s/blog_4b93170a0100mbm9.html

1.先用:ls -al /usr/lib | grep libevent  查看是否已安装,如果已安装且版本低于1.3,则先通过:rpm -e libevent —nodeps 进行卸载。
 
2.下载libevent安装包:libevent-1.4.13-stable.tar.gz,tar zxvf  libevent-1.4.13-stable.tar.gz然后解压。
 
3.切换到解压后的 libevent 主目录:cd libevent-1.4.13-stable
 
4.依次执行:
./configure –prefix=/usr (或 ./configure --program-prefix=/usr) 
make  

////////////////////////////////////////////////////////////////////////////////////////

//libevent-2.0.22-stable.tar.gz

cd  ./libevent-2.0.22-stable

make //出现以下问题

make: *** No targets specified and no makefile found.  Stop.

//libevent-2.0.21-stable.tar.gz没出现这个问题

出现这个问题的原因是,在LINUX下

虚拟机与主机的共享目录下解压安装,刚在共享目录和非共享目录下做了比较,

非共享目录下解压安装没问题,与版本无关
///////////////////////////////////////////////////////////////////////////////////////////////////////////


make install 

注意: 
        1)执行 make install 时可能需要 root 权限。 
        2)libevent会安装到 /usr/local/lib 或下 /usr/lib  , /////////////////////////////// ./configure –prefix=/usr  libevent会安装到  /usr/lib  

5.测试libevent是否安装成功:ls -al /usr/local/lib | grep libevent(或 ls -al /usr/lib | grep libevent)出现:

[root@localhost lib]# ls -al /usr/lib | grep libevent
lrwxrwxrwx.  1 root root       21 Jul  6 08:03 libevent-2.0.so.5 -> libevent-2.0.so.5.1.9
-rwxr-xr-x.  1 root root   756951 Jul  6 08:03 libevent-2.0.so.5.1.9
-rw-r--r--.  1 root root   987156 Jul  6 08:03 libevent.a
lrwxrwxrwx.  1 root root       26 Jul  6 08:03 libevent_core-2.0.so.5 -> libevent_core-2.0.so.5.1.9
-rwxr-xr-x.  1 root root   464126 Jul  6 08:03 libevent_core-2.0.so.5.1.9
-rw-r--r--.  1 root root   620928 Jul  6 08:03 libevent_core.a
-rwxr-xr-x.  1 root root      970 Jul  6 08:03 libevent_core.la
lrwxrwxrwx.  1 root root       26 Jul  6 08:03 libevent_core.so -> libevent_core-2.0.so.5.1.9
lrwxrwxrwx.  1 root root       27 Jul  6 08:03 libevent_extra-2.0.so.5 -> libevent_extra-2.0.so.5.1.9
-rwxr-xr-x.  1 root root   310868 Jul  6 08:03 libevent_extra-2.0.so.5.1.9
-rw-r--r--.  1 root root   366300 Jul  6 08:03 libevent_extra.a
-rwxr-xr-x.  1 root root      977 Jul  6 08:03 libevent_extra.la
lrwxrwxrwx.  1 root root       27 Jul  6 08:03 libevent_extra.so -> libevent_extra-2.0.so.5.1.9
-rwxr-xr-x.  1 root root      935 Jul  6 08:03 libevent.la
lrwxrwxrwx.  1 root root       29 Jul  6 08:03 libevent_openssl-2.0.so.5 -> libevent_openssl-2.0.so.5.1.9
-rwxr-xr-x.  1 root root    79272 Jul  6 08:03 libevent_openssl-2.0.so.5.1.9
-rw-r--r--.  1 root root    87728 Jul  6 08:03 libevent_openssl.a
-rwxr-xr-x.  1 root root     1006 Jul  6 08:03 libevent_openssl.la
lrwxrwxrwx.  1 root root       29 Jul  6 08:03 libevent_openssl.so -> libevent_openssl-2.0.so.5.1.9
lrwxrwxrwx.  1 root root       30 Jul  6 08:03 libevent_pthreads-2.0.so.5 -> libevent_pthreads-2.0.so.5.1.9
-rwxr-xr-x.  1 root root    14585 Jul  6 08:03 libevent_pthreads-2.0.so.5.1.9
-rw-r--r--.  1 root root    12174 Jul  6 08:03 libevent_pthreads.a
-rwxr-xr-x.  1 root root      998 Jul  6 08:03 libevent_pthreads.la
lrwxrwxrwx.  1 root root       30 Jul  6 08:03 libevent_pthreads.so -> libevent_pthreads-2.0.so.5.1.9
lrwxrwxrwx.  1 root root       21 Jul  6 08:03 libevent.so -> libevent-2.0.so.5.1.9
[root@localhost lib]#

6.如果libevent的安装目录为/usr/local/lib下,则还需要建立 libevent-1.4.so.2 到 /usr/lib 的软连接,这样其他程序运行时才能找到libevent库:ln -s /usr/local/lib/libevent-1.4.so.2  /usr/lib/libevent-1.4.so.2

7:编写测试用例

来自:http://blog.chinaunix.net/uid-25885064-id-3399135.html

TestLibevent.c :

// gcc getVersion.c -o getVersion -levent
#include <event.h>
#include <stdio.h>
int main()
{
    const char *version = event_get_version();
    printf("%s\n",version);
    return 0;
}


gcc  -o TestLibevent TestLibevent.c -levent

////服务端ser.c:来自:http://blog.csdn.net/haluoluo211/article/details/50232923

#include <sys/socket.h>  
#include <sys/types.h>  
#include <netinet/in.h>  
#include <stdio.h>  
#include <string.h>  
#include <event.h>  
#include <stdlib.h>  
  
#define PORT        25341  
#define BACKLOG     5  
#define MEM_SIZE    1024  
  
struct event_base* base;  
struct sock_ev  
{  
    struct event* read_ev;  
    struct event* write_ev;  
    char* buffer;  
};  
  
void release_sock_event(struct sock_ev* ev)  
{  
    event_del(ev->read_ev);  
    free(ev->read_ev);  
    free(ev->write_ev);  
    free(ev->buffer);  
    free(ev);  
}  
  
void on_write(int sock, short event, void* arg)  
{  
    char* buffer = (char*)arg;  
    send(sock, buffer, strlen(buffer), 0);  
  
    free(buffer);  
}  
  
void on_read(int sock, short event, void* arg)  
{  
    struct event* write_ev;  
    int size;  
    struct sock_ev* ev = (struct sock_ev*)arg;  
    ev->buffer = (char*)malloc(MEM_SIZE);  
    bzero(ev->buffer, MEM_SIZE);  
    size = recv(sock, ev->buffer, MEM_SIZE, 0);  
    printf("receive data:%s, size:%d\n", ev->buffer, size);  
    if (size == 0)   
    {  
        release_sock_event(ev);  
        close(sock);  
        return;  
    }  
    event_set(ev->write_ev, sock, EV_WRITE, on_write, ev->buffer);  
    event_base_set(base, ev->write_ev);  
    event_add(ev->write_ev, NULL);  
}  
  
void on_accept(int sock, short event, void* arg)  
{  
    struct sockaddr_in cli_addr;  
    int newfd, sin_size;  
    struct sock_ev* ev = (struct sock_ev*)malloc(sizeof(struct sock_ev));  
    ev->read_ev = (struct event*)malloc(sizeof(struct event));  
    ev->write_ev = (struct event*)malloc(sizeof(struct event));  
    sin_size = sizeof(struct sockaddr_in);  
    newfd = accept(sock, (struct sockaddr*)&cli_addr, &sin_size);  
    event_set(ev->read_ev, newfd, EV_READ|EV_PERSIST, on_read, ev);  
    event_base_set(base, ev->read_ev);  
    event_add(ev->read_ev, NULL);  
}  
  
int main(int argc, char* argv[])  
{  
    struct sockaddr_in my_addr;  
    int sock;  
  
    sock = socket(AF_INET, SOCK_STREAM, 0);  
    int yes = 1;  
    setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));  
    memset(&my_addr, 0, sizeof(my_addr));  
    my_addr.sin_family = AF_INET;  
    my_addr.sin_port = htons(PORT);  
    my_addr.sin_addr.s_addr = INADDR_ANY;  
    bind(sock, (struct sockaddr*)&my_addr, sizeof(struct sockaddr));  
    listen(sock, BACKLOG);  
  
    struct event listen_ev;  
    base = event_base_new();  
    event_set(&listen_ev, sock, EV_READ|EV_PERSIST, on_accept, NULL);  
    event_base_set(base, &listen_ev);  
    event_add(&listen_ev, NULL);  
    event_base_dispatch(base);  
  
    return 0;  
}

// 客户端

clent.c

#include <unistd.h>  
#include <stdio.h>  
#include <fcntl.h>  
#include <netdb.h>  
#include <sys/socket.h>  
#include <stdlib.h>  
#include <string.h>  
#define cerror(str) do{perror(str); exit(EXIT_FAILURE); }while(0)  


static int port;   
static char addr[256];  
static int nlen;  
static char msg[]="hello\n";  
int main(int argc, char*argv[])  
{  


int fd;  
struct sockaddr_in sin;  


memset(&sin, 0, sizeof(sin));  
sin.sin_family = AF_INET;  


if(argc<3)  
{  
port = 8888;  
}else  
{  
port = atoi(argv[2]);  
}  


sin.sin_port = htons(port);  


if(argc<2)  
{  
strcpy(addr, argv[1]);  
if (inet_pton(AF_INET, addr, &(sin.sin_addr) )<0)  
{  
struct hostent *psh;    
psh=gethostbyname(addr);  
if(psh!=NULL)  
inet_pton(AF_INET, psh->h_addr, &(sin.sin_addr) );  
else  
cerror("inet_pton");  
}  
}  


if((fd=socket(AF_INET, SOCK_STREAM, 0))<0)  
cerror("socket");  


if(connect(fd, (struct sockaddr*)&sin, sizeof(sin))<0 )  
cerror("sonnect");  


if( (nlen = write(fd,msg, strlen(msg)))<0 )  
cerror("write");  


if( (nlen = read(fd,msg, strlen(msg)))<0 )  
cerror("read");  
msg[nlen]='\0';  
printf("msg: %s\n", msg);  
return 0;  
}



相关文章推荐

Libevent 学习笔记 (1)——Libevent 2.0安装与简单示例

今天主要进行了Libevent的安装,以及利用libevent框架编写一个间隔1s打印 Hello Libevent!信息的程序。首先是安装: 1 下载libevent源码,下载地址http://l...

(一)libevent安装及简单的使用

前言首先我阅读的版本是libevent-1.4.14b-stable版本。1.4系列虽然比较古老,但是它的源码相对简单,便于学习,并且主要的思想与2.0系列是一致的。 附上官网链接:http://l...

Linux下libevent的安装

注意:以root用户身份操作 1、下载源码包 地址2、解压 tar zxvf libevent-2.0.21-stable.tar.gz3、配置安装路径 cd libevent-2.0.21-...

libevent安装总结

1.先用:ls -al /usr/lib | grep libevent 查看是否已安装,如果已安装且版本低于1.3,则先通过:rpm -e libevent —nodeps 进行卸载。 2....

libevent安装编译并测试

由于之前在windows平台下接触过一个网络数据过滤的程序,当时也是第一次写关于网络方面的程序(之前写的小程序不算),明显的经验不足。很多知识都不够用,最后导致这个程序没有完成。但是过程中学到了不少的...

libevent源代码分析-介绍、安装、使用

Libevent介绍及安装,以及一个使用例子

Linux下libevent安装与示例

1.先用:ls -al /usr/lib | grep libevent  查看是否已安装,如果已安装且版本比较低,则先通过:rpm -e libevent —nodeps 进行卸载。   2....

windows 上安装 libevent

Libevent官网:http://libevent.org/ windows 7下编译: 编译环境: windows 7 + VS2010 (1)解压libevent到F:\libevent\...

如何编译和安装libevent

如何编译和安装libevent 编译和安装步骤: $ apt-get install git $ git clone https://github.com/libevent/libeven...

Linux中如何卸载已安装的软件

Linux软件的安装和卸载一直是困扰许多新用户的难题。在Windows中,我们可以使用软件自带的安装卸载程序或在控制面板中的“添加/删除程序”来实现。与其相类似,在Linux下有一个功能强大的软件安装...
  • MonroeD
  • MonroeD
  • 2017年04月29日 13:27
  • 960
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:总结libevent安装方法
举报原因:
原因补充:

(最多只允许输入30个字)