README.dlfcn.aix
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:6k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. Copyright (c) 1992,1993,1995, Jens-Uwe Mager, Helios Software GmbH
  2. Not derived from licensed software.
  3. Permission is granted to freely use, copy, modify, and redistribute
  4. this software, provided that no attempt is made to gain profit from it,
  5. the author is not construed to be liable for any results of using the
  6. software, alterations are clearly marked as such, and this notice is
  7. not modified.
  8. libdl.a
  9. -------
  10. This is an emulation library to emulate the SunOS/System V.4 functions
  11. to access the runtime linker. The functions are emulated by using the
  12. AIX load() function and by reading the .loader section of the loaded
  13. module to find the exports. The to be loaded module should be linked as
  14. follows (if using AIX 3):
  15. cc -o module.so -bM:SRE -bE:module.exp -e _nostart $(OBJS)
  16. For AIX 4:
  17. cc -o module.so -bM:SRE -bE:module.exp -bnoentry $(OBJS)
  18. The module export file contains the symbols to be exported. Because
  19. this library uses the loader section, the final module.so file can be
  20. stripped. C++ users should build their shared objects using the script
  21. makeC++SharedLib (part of the IBM C++ compiler), this will make sure
  22. that constructors and destructors for static and global objects will be
  23. called upon loading and unloading the module.
  24. Usage
  25. -----
  26. void *dlopen(const char *path, int mode);
  27. This routine loads the module pointed to by path and reads its export
  28. table. If the path does not contain a '/' character, dlopen will search
  29. for the module using the LIBPATH environment variable. It returns an
  30. opaque handle to the module or NULL on error. The mode parameter can be
  31. either RTLD_LAZY (for lazy function binding) or RTLD_NOW for immediate
  32. function binding. The AIX implementation currently does treat RTLD_NOW
  33. the same as RTLD_LAZY. The flag RTLD_GLOBAL might be or'ed into the
  34. mode parameter to allow loaded modules to bind to global variables or
  35. functions in other loaded modules loaded by dlopen(). If RTLD_GLOBAL is
  36. not specified, only globals from the main part of the executable or
  37. shared libraries are used to look for undefined symbols in loaded
  38. modules.
  39. void *dlsym(void *handle, const char *symbol);
  40. This routine searches for the symbol in the module referred to by
  41. handle and returns its address. If the symbol could not be found, the
  42. function returns NULL. The return value must be casted to a proper
  43. function pointer before it can be used. SunOS/System V.4 allow handle
  44. to be a NULL pointer to refer to the module the call is made from, this
  45. is not implemented.
  46. int dlclose(void *handle);
  47. This routine unloads the module referred to by the handle and disposes
  48. of any local storage. this function returns -1 on failure.
  49. char *dlerror(void);
  50. This routine can be used to retrieve a text message describing the most
  51. recent error that occured on on of the above routines. This function
  52. returns NULL if there is not error information.
  53. Initialization and termination handlers
  54. ---------------------------------------
  55. The emulation provides for an initialization and a termination
  56. handler.  The dlfcn.h file contains a structure declaration named
  57. dl_info with following members:
  58. void (*init)(void);
  59. void (*fini)(void);
  60. The init function is called upon first referencing the library. The
  61. fini function is called at dlclose() time or when the process exits.
  62. The module should declare a variable named dl_info that contains this
  63. structure which must be exported.  These functions correspond to the
  64. documented _init() and _fini() functions of SunOS 4.x, but these are
  65. appearently not implemented in SunOS.  When using SunOS 5.0, these
  66. correspond to #pragma init and #pragma fini respectively. At the same
  67. time any static or global C++ object's constructors or destructors will
  68. be called.
  69. Jens-Uwe Mager
  70. HELIOS Software GmbH
  71. Lavesstr. 80
  72. 30159 Hannover
  73. Germany
  74. Phone: +49 511 36482-0
  75. FAX: +49 511 36482-69
  76. AppleLink: helios.de Attn: Jens-Uwe Mager
  77. Internet: jum@helios.de
  78. Revison History
  79. ---------------
  80. SCCS/s.dlfcn.h:
  81. D 1.4 95/04/25 09:36:52 jum 4 3 00018/00004/00028
  82. MRs:
  83. COMMENTS:
  84. added RTLD_GLOBAL, include and C++ guards
  85. D 1.3 92/12/27 20:58:32 jum 3 2 00001/00001/00031
  86. MRs:
  87. COMMENTS:
  88. we always have prototypes on RS/6000
  89. D 1.2 92/08/16 17:45:11 jum 2 1 00009/00000/00023
  90. MRs:
  91. COMMENTS:
  92. added dl_info structure to implement initialize and terminate functions
  93. D 1.1 92/08/02 18:08:45 jum 1 0 00023/00000/00000
  94. MRs:
  95. COMMENTS:
  96. Erstellungsdatum und -uhrzeit 92/08/02 18:08:45 von jum
  97. SCCS/s.dlfcn.c:
  98. D 1.7 95/08/14 19:08:38 jum 8 6 00026/00004/00502
  99. MRs:
  100. COMMENTS:
  101. Integrated the fixes from Kirk Benell (kirk@rsinc.com) to allow loading of
  102. shared objects generated under AIX 4. Fixed bug that symbols with exactly
  103. 8 characters would use garbage characters from the following symbol value.
  104. D 1.6 95/04/25 09:38:03 jum 6 5 00046/00006/00460
  105. MRs:
  106. COMMENTS:
  107. added handling of C++ static constructors and destructors, added RTLD_GLOBAL to bind against other loaded modules
  108. D 1.5 93/02/14 20:14:17 jum 5 4 00002/00000/00464
  109. MRs:
  110. COMMENTS:
  111. added path to dlopen error message to make clear where there error occured.
  112. D 1.4 93/01/03 19:13:56 jum 4 3 00061/00005/00403
  113. MRs:
  114. COMMENTS:
  115. to allow calling symbols in the main module call load with L_NOAUTODEFER and 
  116. do a loadbind later with the main module.
  117. D 1.3 92/12/27 20:59:55 jum 3 2 00066/00008/00342
  118. MRs:
  119. COMMENTS:
  120. added search by L_GETINFO if module got loaded by LIBPATH
  121. D 1.2 92/08/16 17:45:43 jum 2 1 00074/00006/00276
  122. MRs:
  123. COMMENTS:
  124. implemented initialize and terminate functions, added reference counting to avoid multiple loads of the same library
  125. D 1.1 92/08/02 18:08:45 jum 1 0 00282/00000/00000
  126. MRs:
  127. COMMENTS:
  128. Erstellungsdatum und -uhrzeit 92/08/02 18:08:45 von jum