必须包含头文件 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来写的效率比较高。