解决办法 undefined reference to `evthread_use_pthreads'
-levent -levent_pthreads
在使用了下面的代码时,会需要线程库
evthread_use_pthreads();
base = event_base_new();
evthread_make_base_notifiable(base);
libevent针对win32平台定义了evthread_use_windows_threads,
libevent针对Linux thread库 定义了evthread_use_pthreads
使用libevent时为了保证线程安全,提供了evthread_use_pthreads函数
他的内部是会分配内存的,但是没有对应的函数来反释放evthread_use_pthreads分配的内存,那么在如下的场景用evthread_use_pthreads就会造成内存泄露
libevent被编译为静态库然后被链接进了一个动态库A,我们在使用dlopen来加载静态库A,在使用时库A的内部是调用了evthread_use_pthreads的,会被分配内存出来,然后使用dlclose卸载掉库A,但是这里evthread_use_pthreads分配的内存并没有被释放掉!!!!然后又用dlopen来加载库A,这时其内部对evthread_use_pthreads的调用会不会分配新的内存,答案是会的,因为之前是整个把A卸载掉了。
如果不卸载掉A库,反复调用evthread_use_pthreads是不会造成泄露的,因为由全局变量在判别是否已经初始化了,但是卸载掉库后全局变量也就不存在了,再次加载全局变量依旧被初始化为0,evthread_use_pthreads会分配内存
当然,我们大多时候只会加载一次库
本文链接地址:https://const.net.cn/507.html