#ifndef LLDB_TEST_DYLIB_H
#define LLDB_TEST_DYLIB_H
#include <stdio.h>
#ifdef _WIN32
#include <Windows.h>
#define dylib_get_symbol(handle, name) GetProcAddress((HMODULE)handle, name)
#define dylib_close(handle) (!FreeLibrary((HMODULE)handle))
#else
#include <dlfcn.h>
#define dylib_get_symbol(handle, name) dlsym(handle, name)
#define dylib_close(handle) dlclose(handle)
#endif
inline void *dylib_open(const char *name) {
char dylib_prefix[] =
#ifdef _WIN32
"";
#else
"lib";
#endif
char dylib_suffix[] =
#ifdef _WIN32
".dll";
#elif defined(__APPLE__)
".dylib";
#else
".so";
#endif
char fullname[1024];
snprintf(fullname, sizeof(fullname), "%s%s%s", dylib_prefix, name, dylib_suffix);
#ifdef _WIN32
return LoadLibraryA(fullname);
#else
return dlopen(fullname, RTLD_NOW);
#endif
}
inline const char *dylib_last_error() {
#ifndef _WIN32
return dlerror();
#else
DWORD err = GetLastError();
char *msg;
FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (char *)&msg, 0, NULL);
return msg;
#endif
}
#endif