1.libevent,libev,libuv 的关系
libevent : 名气最大,应用最广泛,历史悠久的跨平台事件库;
libev : 较libevent而言,设计更简练,性能更好,但对Windows支持不够好;
libuv : 开发node的过程中需要一个跨平台的事件库,他们首选了libev,但又要支持Windows,故重新封装了一套,unix下用libev实现,Windows下用IOCP实现;
2.libuv交叉编译注意事项
由于libuv是支持跨平台的,在编译的时候,有时会出现在这个平台上可以,在另外一个平台上用相同的方法就会出现问题的现象。我在为ARM编译该库的时候,出现了编译时,出现了代码错误:
error: invalid conversion from 'void*' to 'poll_ctx*' [-fpermissive]
这是因为我选的编译器是C++编译器问题,而libuv库是用C语言写的,C++比C更严格,所以我们必须告诉编译器 “void 指针” 到底指向的是什么类型。这时有两个解决办法,一是修改源码,二是换为C的编译器。
修改源码:
struct pool_ctx* a = func(...); //func()返回类型为 void *
/******************************修改为***************************/
struct pool_ctx* a = (struct pool_ctx*)func(...);
修改编译器:比喻原来为g++,现在改为gcc