8 #include <botan/internal/dyn_load.h> 9 #include <botan/build.h> 12 #if defined(BOTAN_TARGET_OS_HAS_DLOPEN) 14 #elif defined(BOTAN_TARGET_OS_HAS_LOADLIBRARY) 22 void raise_runtime_loader_exception(
const std::string& lib_name,
25 throw std::runtime_error(
"Failed to load " + lib_name +
": " +
26 (msg ? msg :
"Unknown error"));
32 const std::string& library) :
33 lib_name(library), lib(0)
35 #if defined(BOTAN_TARGET_OS_HAS_DLOPEN) 36 lib = ::dlopen(lib_name.c_str(), RTLD_LAZY);
39 raise_runtime_loader_exception(lib_name, dlerror());
41 #elif defined(BOTAN_TARGET_OS_HAS_LOADLIBRARY) 42 lib = ::LoadLibraryA(lib_name.c_str());
45 raise_runtime_loader_exception(lib_name,
"LoadLibrary failed");
49 raise_runtime_loader_exception(lib_name,
"Dynamic load not supported");
54 #if defined(BOTAN_TARGET_OS_HAS_DLOPEN) 56 #elif defined(BOTAN_TARGET_OS_HAS_LOADLIBRARY) 57 ::FreeLibrary((HMODULE)lib);
65 #if defined(BOTAN_TARGET_OS_HAS_DLOPEN) 66 addr = ::dlsym(lib, symbol.c_str());
67 #elif defined(BOTAN_TARGET_OS_HAS_LOADLIBRARY) 68 addr =
reinterpret_cast<void*
>(::GetProcAddress((HMODULE)lib,
73 throw std::runtime_error(
"Failed to resolve symbol " + symbol +
Dynamically_Loaded_Library(const std::string &lib_name)
~Dynamically_Loaded_Library()
void * resolve_symbol(const std::string &symbol)