必须包含头文件 dlfcn.h。
使用到dlopen, dlclose, dlsym 3个主要函数,dlerror可以获取加载中遇到的错误的字符串。
下面给出部分代码,来自最新版homeserver:
DBG("Loading plugin [%s]", name );
#ifdef __WIN32__
p->handle = LoadLibrary( path );
if( p->handle ){
p->entry = (plugin_entry) GetProcAddress( p->handle,"plugin_entry");//
p->cleanup = (plugin_entry) GetProcAddress( p->handle,"plugin_cleanup");//
}
if( !p->handle || p->entry==NULL ){
DBG("# Loading plugin: %s failed: %d", path, GetLastError() );
#else
//linux
p->handle = (int)dlopen( path, RTLD_LAZY );
if( p->handle ){
p->entry = (plugin_entry) dlsym( (void*)p->handle,"plugin_entry");//
p->cleanup = (plugin_entry) dlsym( (void*)p->handle,"plugin_cleanup");//
}
if( !p->handle || p->entry==NULL ){
DBG("# Loading plugin: %s failed: %s", path, dlerror() );
#endif
homeserver的源代码下载链接:
homeserver090930
小虾有没有用过epoll,听说linux 2.6+下用epoll来写的效率比较高。