简介:

libev - 一个 C 编写的功能全面的高性能事件循环。

libev的官网(http://libev.schmorp.de/)在国内已经没法访问了。但是我们仍然可以从github上下载其源码(https://github.com/enki/libev)。

移植过程

1.下载源码包

2.进入源码包主目录

      cd  libev-master/

      mkdir _install  (创建安装目录)

3.配置

  ./configure --prefix=${PWD}/_install --host=arm-none-linux CC=arm-none-linux-gnueabi-gcc   

4.编译

make -j4

5.安装

make install

6.拷贝到目标板

将libev.so.4.0.0移动到开发板的/lib目录下并建立软链接

cp _install/lib/libev.so.4.0.0  /home/jiangyu/rootfs/lib/

ln -s libev.so.4.0.0 libev.so

ln -s libev.so.4.0.0 libev.so.4

并且在交叉编译代码时,将_install/include/目录下的头文件和_install/lib/下的库文件拷贝到相应的路径下。

/* 至此环境移植成功 */ 

7.测试test.c

#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <sys/unistd.h>
#include "ev.h"


void io_action(struct ev_loop *main_loop,ev_io *io_w,int e)
{
    int rst;
    char buf[1024];
    memset(buf,0,sizeof(buf));
    puts("In IO action");
    read(STDIN_FILENO,buf,sizeof(buf));
    buf[1023]='\0';
    printf("String: %s\n",buf);
    ev_io_stop(main_loop,io_w);
}

void timer_action(struct ev_loop *main_loop,ev_timer *time_w,int e)
{
    puts("In Time action");
    ev_timer_stop(main_loop,time_w);
}

void signal_action(struct ev_loop *main_loop,ev_signal *signal_w,int e)
{
    puts("In Signal action");
    ev_signal_stop(main_loop,signal_w);
    ev_break(main_loop,EVBREAK_ALL);
}

int main(int argc,char **argv)
{
    ev_io io_w;
    ev_timer timer_w;
    ev_signal signal_w;
    struct ev_loop *main_loop = ev_default_loop(0);

    ev_init(&io_w,io_action);
    ev_io_set(&io_w,STDIN_FILENO,EV_READ);

    ev_init(&timer_w,timer_action);
    ev_timer_set(&timer_w,5,0);

    ev_init(&signal_w,signal_action);
    ev_signal_set(&signal_w,SIGINT);

    ev_io_start(main_loop,&io_w);
    ev_timer_start(main_loop,&timer_w);
    ev_signal_start(main_loop,&signal_w);

    ev_run(main_loop,0);
    return 0;
}

Makefile

BIN = test_libev
IDIR = include/
SRC = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SRC))

LDIR = lib/
CFLAGS = -I$(IDIR) -g
LIBS = -L$(LDIR) -lev -lpthread

CC = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc

#$@:所有的目标文件
#$^:所有的依赖文件

$(BIN): $(OBJS)
	$(CC) -o $@ $^ $(LIBS)


.PHONY: clean

clean:
	rm -rf $(OBJS) $(BIN)

执行./test_libev

结果:

     标准输入aabbccdd   

     标准输出结果:

             In IO action

             String: aabbccdd

    程序执行5s后,输出

             In Time action

    结束程序后,输出

             In Signal action   

 测试成功。

更多推荐