Hi Eddy,
this is implemented via CINT. Look in TUnixSystem::DynFindSymbol() which
calls back the base class version TSystem::DynFindSymbol() which calls
G__findsym().
Groetjes, Fons.
Eddy Offermann wrote:
>
> Hi Fons and Rene,
>
> I notice that UnixDynFindSymbol is only defined for HPUX. Any particular
> reason ?? Maybe one could use dlopen, ...dlsym etc
>
> Looking at the man page for dlsym:
>
> Example 1: Using dlopen() and dlsym() to access a function
> or data objects.
>
> The following example shows how one can use dlopen() and
> dlsym() to access either function or data objects. For sim-
> plicity, error checking has been omitted.
>
> void *handle;
> int *iptr, (*fptr)(int);
>
> /* open the needed object */
> handle = dlopen("/usr/home/me/libfoo.so.1", RTLD_LAZY);
>
> /* find the address of function and data objects */
> fptr = (int (*)(int))dlsym(handle, "my_function");
> iptr = (int *)dlsym(handle, "my_object");
>
> /* invoke function, passing value of integer as a parameter */
> (*fptr)(*iptr);
>
> Example 2: Using dlsym() to verify that a particular func-
> tion is defined.
>
> The following code fragment shows how dlsym() can be used to
> verify that a particular function is defined and to call it
> only if it is.
>
> int (*fptr)();
>
> if ((fptr = (int (*)())dlsym(RTLD_DEFAULT,
> "my_function")) != NULL) {
> (*fptr)();
> }
>
> Eddy
>
> /______________________________________________________________________________
> Func_t TUnixSystem::UnixDynFindSymbol(const char *lib, const char *entry)
> {
> // Finds and returns a function pointer to a symbol in the shared library.
> // Returns 0 when symbol not found.
>
> #if defined(R__HPUX) && !defined(R__GNU)
> shl_t handle;
>
> if (handle = (shl_t)FindDynLib(lib)) {
> Func_t addr = 0;
> if (shl_findsym(&handle, entry, TYPE_PROCEDURE, addr) == -1)
> ::SysError("TUnixSystem::UnixDynFindSymbol", "shl_findsym");
> return addr;
> }
> return 0;
> #else
> if (lib || entry) { }
>
> // Always assume symbol not found
> return 0;
> #endif
> }
--
Org: CERN, European Laboratory for Particle Physics.
Mail: 1211 Geneve 23, Switzerland
E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248
WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7677910
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:44 MET