home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  


Book HomeJava and XSLTSearch this book

8.61. DynaLoader

The standard Perl interface to the dynamic linking mechanisms available on many platforms.

8.61.1. Using DynaLoader

Use DynaLoader like this:

package Module;
require DynaLoader;
@ISA = qw(... DynaLoader ...);

bootstrap Module;

The bootstrap method calls your module's bootstrap routine directly if the module is statically linked into Perl. Otherwise, the module inherits the bootstrap method from DynaLoader, which loads in your module and calls its bootstrap method.

8.61.2. Extending to New Architectures

If you want to extend DynaLoader to a new architecture, you need to know about its internal interface. The variables it uses are:

$dl_debug
Enables internal debugging messages on the Perl side of the DynaLoader; by default, is set to $ENV{'PERL_DL_DEBUG'} if that is defined. A similar debugging variable is added to the C code (see dlutils.c) and enabled if Perl was built with the -DDEBUGGING flag, or it can be set via the PERL_DL_DEBUG environment variable. Set to 1 for minimal information or higher for more detail.

@dl_library_path
Default list of directories to search for libraries; initialized to hold the list of directories in $Config{'libpth'}. Should also be initialized with other directories that can be determined from the environment at runtime.

@dl_resolve_using
List of additional libraries or other shared objects for resolving undefined symbols. Required only on platforms without automatic handling for dependent libraries.

@dl_require_symbols
List of one or more symbol names in the library/object file to be dynamically loaded. Only required on some platforms.

Of the following subroutines, bootstrap and dl_findfile are standard across all platforms and are defined in DynaLoader.pm. The others are defined in the .xs file that supplies the implementation for the platform.

bootstrap

bootstrap (modulename)

Normal entry point for automatic dynamic loading in Perl.

dl_error

dl_error

Gets error message text from the last failed DynaLoader function:

$message = dl_error(  );
dl_expandspec

dl_expandspec (spec)

Used for systems that require special filename handling to deal with symbolic names for files. spec specifies the filenames that need the special handling.

dl_findfile

dl_findfile (names)

Determines the full paths to one or more loadable files, given their generic names and optionally one or more directories. Searches directories in @dl_library_path by default and returns an empty list if no files are found.

dl_find_symbol

dl_find_symbol (libref, symbol)

Looks in libref for the address of symbol symbol. Returns the address, or undef if not found.

dl_install_xsub

dl_install_xsub (perl_name, symref[, filename])

Creates a new Perl external subroutine. Takes the following arguments:

perl_name
Name of the new subroutine.

symref
Pointer to the function that implements the routine.

filename
The source file for the function. If not defined, DynaLoader is used.

dl_load_file

dl_load_file (filename)

Dynamically loads filename, which must be the path to a shared object or library; returns undef on error.

dl_undef_symbols

dl_undef_symbols

Returns list of symbol names that remain undefined after dl_load_file, or ( ) if the names are unknown.



Library Navigation Links

Copyright © 2002 O'Reilly & Associates. All rights reserved.