8#include <botan/dyn_load.h>
9#include <botan/exceptn.h>
11#if defined(BOTAN_TARGET_OS_HAS_POSIX1)
13#elif defined(BOTAN_TARGET_OS_HAS_WIN32)
23void raise_runtime_loader_exception(
const std::string& lib_name,
26 const std::string ex_msg =
27 "Failed to load " + lib_name +
": " +
28 (msg ? msg :
"Unknown error");
30 throw System_Error(ex_msg, 0);
36 const std::string& library) :
37 m_lib_name(library), m_lib(nullptr)
39#if defined(BOTAN_TARGET_OS_HAS_POSIX1)
40 m_lib = ::dlopen(m_lib_name.c_str(), RTLD_LAZY);
43 raise_runtime_loader_exception(m_lib_name, ::dlerror());
45#elif defined(BOTAN_TARGET_OS_HAS_WIN32)
46 m_lib = ::LoadLibraryA(m_lib_name.c_str());
49 raise_runtime_loader_exception(m_lib_name,
"LoadLibrary failed");
53 raise_runtime_loader_exception(m_lib_name,
"Dynamic load not supported");
58#if defined(BOTAN_TARGET_OS_HAS_POSIX1)
60#elif defined(BOTAN_TARGET_OS_HAS_WIN32)
61 ::FreeLibrary((HMODULE)m_lib);
69#if defined(BOTAN_TARGET_OS_HAS_POSIX1)
70 addr = ::dlsym(m_lib, symbol.c_str());
71#elif defined(BOTAN_TARGET_OS_HAS_WIN32)
72 addr =
reinterpret_cast<void*
>(::GetProcAddress((HMODULE)m_lib, symbol.c_str()));
Dynamically_Loaded_Library(const std::string &lib_name)
void * resolve_symbol(const std::string &symbol)
~Dynamically_Loaded_Library()