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)