#ifndef LLDB_TEST_DYLIB_H #define LLDB_TEST_DYLIB_H #include #ifdef _WIN32 #include #define dylib_get_symbol(handle, name) GetProcAddress((HMODULE)handle, name) #define dylib_close(handle) (!FreeLibrary((HMODULE)handle)) #else #include #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