SymbolLoader.cxx
上传用户:xfwatch
上传日期:2020-12-14
资源大小:872k
文件大小:1k
源码类别:

中间件编程

开发平台:

Java

  1. /*
  2.  * SymbolLoader.cpp
  3.  *
  4.  *  Created on: Mar 11, 2009
  5.  *      Author: tom
  6.  */
  7. #include "SymbolLoader.h"
  8. #include "ace/DLL.h"
  9. #include "log4cxx/logger.h"
  10. log4cxx::LoggerPtr symbolLoaderLogger(log4cxx::Logger::getLogger(
  11. "symbolLoaderLogger"));
  12. void* lookup_symbol(const char *lib, const char *symbol) {
  13. LOG4CXX_LOGLS(symbolLoaderLogger, log4cxx::Level::getTrace(),
  14. (char *) "lookup_symbol " << symbol << (char *) " in library "
  15. << lib);
  16. if (symbol == NULL || lib == NULL)
  17. return 0;
  18. ACE_DLL dll;
  19. int retval = dll.open(lib, ACE_DEFAULT_SHLIB_MODE, 0);
  20. if (retval != 0) {
  21. LOG4CXX_ERROR(symbolLoaderLogger, (char*) "lookup_symbol: " << symbol
  22. << (char *) " dll.open error: " << dll.error());
  23. return NULL;
  24. }
  25. void * sym = NULL;
  26. try {
  27. sym = dll.symbol(symbol);
  28. if (sym == NULL) {
  29. LOG4CXX_ERROR(symbolLoaderLogger, (char*) "lookup_symbol: "
  30. << symbol << (char *) " dlsym error: " << dll.error());
  31. dll.close();
  32. return NULL;
  33. }
  34. LOG4CXX_TRACE(symbolLoaderLogger, (char *) "symbol addr=" << sym);
  35. return sym;
  36. } catch (std::exception& e) {
  37. LOG4CXX_ERROR(symbolLoaderLogger, (char *) "symbol addr=" << sym
  38. << e.what());
  39. return NULL;
  40. }
  41. }