13 #if defined(HAVE_DLFCN_H) && defined(HAVE_DLOPEN)
24 DynamicLibrary::SearchOrder = DynamicLibrary::SO_Linker;
28 void *Handle = ::dlopen(
File, RTLD_LAZY|RTLD_GLOBAL);
30 if (Err) *Err = ::dlerror();
38 Handle = RTLD_DEFAULT;
49 return ::dlsym(Handle,
Symbol);
57 if (Err) *Err =
"dlopen() not supported on this platform";
71 static void *DoSearch(
const char*
SymbolName) {
72 #define EXPLICIT_SYMBOL(SYM) \
73 extern void *SYM; if (!strcmp(SymbolName, #SYM)) return (void*)&SYM
88 EXPLICIT_SYMBOL(__eprintf);
96 EXPLICIT_SYMBOL(_alloca);
97 EXPLICIT_SYMBOL(__main);
101 #undef EXPLICIT_SYMBOL
104 #define EXPLICIT_SYMBOL(SYM) \
105 if (!strcmp(SymbolName, #SYM)) return &SYM
110 #if defined(__GLIBC__)
112 EXPLICIT_SYMBOL(stderr);
113 EXPLICIT_SYMBOL(stdout);
114 EXPLICIT_SYMBOL(stdin);
121 EXPLICIT_SYMBOL(stdin);
124 EXPLICIT_SYMBOL(stdout);
127 EXPLICIT_SYMBOL(stderr);
131 #undef EXPLICIT_SYMBOL