# 8.5 `dl` -- Call C functions in shared objects

Availability: Unix.

The `dl` module defines an interface to the `dlopen()` function, which is the most common interface on Unix platforms for handling dynamically linked libraries. It allows the program to call arbitary functions in such a library.

Note: This module will not work unless

      sizeof(int) == sizeof(long) == sizeof(char *)

If this is not the case, `SystemError` will be raised on import.

The `dl` module defines the following function:

`open` (name[, mode`= RTLD_LAZY`])
  Open a shared object file, and return a handle. Mode signifies late binding (`RTLD_LAZY`) or immediate binding (`RTLD_NOW`). Default is `RTLD_LAZY`. Note that some sytems do not support `RTLD_NOW`.

  Return value is a dlobject.

The `dl` module defines the following constants:

`RTLD_LAZY`
  Useful as an argument to `open()`.

`RTLD_NOW`
  Useful as an argument to `open()`. Note that on systems which do not support immediate binding, this constant will not appear in the module. For maximum portability, use `hasattr()` to determine if the system supports immediate binding.

The `dl` module defines the following exception:

`error`
  Exception raised when an error has occured inside the dynamic loading and linking routines.

Example:

      >>> import dl, time
      >>> a=dl.open('/lib/libc.so.6')
      >>> a.call('time'), time.time()
      (929723914, 929723914.498)

This example was tried on a Debian GNU/Linux system, and is a good example of the fact that using this module is usually a bad alternative.

- 8.5.1 Dl Objects