我试图将一个成员函数传递给libevent,它应被视为回调.
#include <event.h>
class A
{
public:
void eventcb(evutil_socket_t fd, short events, void *ctx) { }
};
static void global_eventcb(evutil_socket_t fd, short events, void *ctx) { }
typedef void (A::*mthd)(evutil_socket_t, short, void*);
int main(void)
{
struct event_base *evbase = event_base_new();
mthd eventcb = &A::eventcb;
A *instance = new A;
(instance->*eventcb)(NULL, 0, NULL);
struct event *timer1 = evtimer_new(evbase, global_eventcb, NULL);
struct event *timer2 = evtimer_new(evbase, (instance->*eventcb), NULL);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我可以在A类中成功创建一个指向eventcb的方法指针,并在A的实例上调用它(第20行).
此外,在第22行传递全局函数(如在C中一样)也可以正常工作.
但是,在第23行,我尝试将我的方法指针传递给libevent,当我编译它时,我得到以下错误(使用 …
我libevent-dev在Debian 7 64bit桌面上安装了这个库:
$ sudo aptitude install -y libevent-dev
Run Code Online (Sandbox Code Playgroud)
然后我安装了PECL库
$ pecl list
Installed packages, channel pecl.php.net:
=========================================
Package Version State
libevent 0.1.0 beta
Run Code Online (Sandbox Code Playgroud)
我已经重新启动了PHP和操作系统,但PHP没有将libevent列为已安装的ext,phpinfo()并且"PHP Fatal error: Call to undefined function event_base_new()"当我尝试使用它时我得到了.
你如何安装Libevent?
将ubuntu 16升级到18后,执行tmux时出现此错误
tmux:加载共享库时出错:libevent-2.0.so.5:无法打开共享库文件:没有这样的文件或目录
这是我执行时的结果 ldd $(which tmux)
linux-vdso.so.1 (0x00007ffd9878a000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f5588dfc000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f5588bd2000)
libevent-2.0.so.5 => not found
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f55889b7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f55885c6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5588fff000
Run Code Online (Sandbox Code Playgroud) 我试图将这个libevent2包编译到Windows,但目前我不能,因为configure脚本是一个shell脚本(/ bin/sh;不能在Windows中运行).
有什么方法可以编译它或获得预编译的包吗?我目前安装了MinGW,CMake和MS C++.
编辑:我已经设法使用nmake Makefile.nmake编译libevent2 但它没有生成任何Windows二进制文件/库.只有.lib.
makefile如下 -
# WATCH OUT! This makefile is a work in progress. It is probably missing
# tons of important things. DO NOT RELY ON IT TO BUILD A GOOD LIBEVENT.
# Needed for correctness
CFLAGS=/IWIN32-Code /Iinclude /Icompat /DWIN32 /DHAVE_CONFIG_H /I.
# For optimization and warnings
CFLAGS=$(CFLAGS) /Ox /W3 /wd4996 /nologo
# XXXX have a debug mode
LIBFLAGS=/nologo
CORE_OBJS=event.obj buffer.obj bufferevent.obj bufferevent_sock.obj \
bufferevent_pair.obj listener.obj evmap.obj log.obj evutil.obj …Run Code Online (Sandbox Code Playgroud) 我想在C中编译客户端以进行Redis。我已经下载并安装了libevent库和hiredis文件。我使用了以下命令:
gcc -I/home/tasos/Dropbox/lists/hiredis example-libevent.c -levent
Run Code Online (Sandbox Code Playgroud)
但我得到这些错误:
/tmp/ccxoerYJ.o: In function `redisLibeventReadEvent':
example-libevent.c:(.text+0x28): undefined reference to `redisAsyncHandleRead'
/tmp/ccxoerYJ.o: In function `redisLibeventWriteEvent':
example-libevent.c:(.text+0x56): undefined reference to `redisAsyncHandleWrite'
/tmp/ccxoerYJ.o: In function `getCallback':
example-libevent.c:(.text+0x2d2): undefined reference to `redisAsyncDisconnect'
/tmp/ccxoerYJ.o: In function `main':
example-libevent.c:(.text+0x393): undefined reference to `redisAsyncConnect'
example-libevent.c:(.text+0x3f3): undefined reference to `redisAsyncSetConnectCallback'
example-libevent.c:(.text+0x404): undefined reference to `redisAsyncSetDisconnectCallback'
example-libevent.c:(.text+0x45d): undefined reference to `redisAsyncCommand'
example-libevent.c:(.text+0x47d): undefined reference to `redisAsyncCommand'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
我正在使用libebb(http://tinyclouds.org/libebb/)和libev编写一个Web服务器.我正在寻找一个使用libev事件循环的异步httpclient.
我希望它支持Http 1.1(流水线,保持活动等).
我希望这不是一个愚蠢的问题.