Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ dlsym(3X) — Motorola System V 88k Release 4 Version 4.3

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

dlclose(3X)

dlerror(3X)

dlopen(3X)

dlsym(3X)  —  MISCELLANEOUS LIBRARY FUNCTIONS

NAME

dlsym − get the address of a symbol in shared object

SYNOPSIS

cc [flag ...] file ...  −ldl [library ...]

#include <dlfcn.h>

void ∗dlsym(void ∗handle, char ∗name);

DESCRIPTION

dlsym allows a process to obtain the address of a symbol defined within a shared object previously opened by dlopen.  handle is a value returned by a call to ­dlopen; the corresponding shared object must not have been closed using ­dlclose.  name is the symbol’s name as a character string.  dlsym searches for the named symbol in all shared objects loaded automatically as a result of loading the object referenced by handle [see dlopen(3X)]. 

This routine is available in a library that is loaded if the option -ldl is used with cc or ld.  The -ldl library (and the routines it contains) may not be used when a program is to be statically linked. 

EXAMPLES

The following example shows how one can use dlopen and dlsym to access either function or data objects. For simplicity, error checking has been omitted.

void ∗handle;
int i, ∗iptr;
int (∗fptr)(int);
 /∗ open the needed object ∗/
handle = dlopen("/usr/mydir/libx.so", RTLD_LAZY);
 /∗ find address of function and data objects ∗/
fptr = (int (∗)(int))dlsym(handle, "some_function");
 iptr = (int ∗)dlsym(handle, "int_object");
 /∗ invoke function, passing value of integer as a parameter ∗/
 i = (∗fptr)(∗iptr);

SEE ALSO

dlclose(3X), dlerror(3X), dlopen(3X)

DIAGNOSTICS

If handle does not refer to a valid object opened by dlopen, or if the named symbol cannot be found within any of the objects associated with handle, dlsym returns NULL.  More detailed diagnostic information is available through dlerror. 

  —  C Programming Language Utilities

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026