dl.h 802 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #ifndef _DL_H
  2. #define _DL_H
  3. #include "common.h"
  4. #include <dlfcn.h>
  5. #include <bdlib/src/String.h>
  6. #include <bdlib/src/HashTable.h>
  7. #define DLSYM(_handle, x) \
  8. dlerror(); \
  9. x##_t x; \
  10. *(void **) (&x) = dlsym(_handle, #x); \
  11. dlsym_error = dlerror(); \
  12. if (dlsym_error) { \
  13. sdprintf("%s", dlsym_error); \
  14. return(1); \
  15. }
  16. #define DLSYM_GLOBAL(_handle, x) do { \
  17. dlerror(); \
  18. dl_symbol_table[#x] = (FunctionPtr) ((x##_t) dlsym(_handle, #x)); \
  19. my_symbols << #x; \
  20. dlsym_error = dlerror(); \
  21. if (dlsym_error) { \
  22. fprintf(stderr, "%s", dlsym_error); \
  23. return(1); \
  24. } \
  25. } while (0)
  26. #define DLSYM_VAR(x) ((x##_t)dl_symbol_table[#x])
  27. extern bd::HashTable<bd::String, FunctionPtr> dl_symbol_table;
  28. #ifdef GENERATE_DEFS
  29. #undef DLSYM_GLOBAL
  30. #endif
  31. #endif /* !_DL_H_ */