14 DynamicLoader(
const std::string& dynamic_object_path ) {
15 int FLAGS = RTLD_NOW | RTLD_GLOBAL;
17 _lib_handle = dlopen( dynamic_object_path.c_str(), FLAGS );
19 if ( _lib_handle !=
nullptr )
24 DebugPrint() <<
"Unable to load dynamic object: " << dynamic_object_path <<
" - '" << dlerror() <<
"'";
27 virtual ~DynamicLoader() {
28 if ( _lib_handle !=
nullptr )
30 if ( _lib_handle !=
nullptr )
31 dlclose( _lib_handle );
32 _lib_handle =
nullptr;
37 T getSymbol(
const std::string& symbol_name ) {
38 return T( _getSymbol( symbol_name ) );
45 return _lib_handle !=
nullptr;
49 void* _getSymbol(
const std::string& symbol_name )
const {
50 if ( _lib_handle ==
nullptr )
52 DebugPrint() <<
"Cannot to load symbol'" << symbol_name <<
"' if the dynamic object is not open.";
58 void* ret = dlsym( _lib_handle, symbol_name.c_str());
60 DebugPrint() <<
"Unable to load symbol'" << symbol_name <<
"'.";