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)