http://www.fmi.uni-passau.de/archive/doc/unix/perl/faq/1.34.html (Einblicke ins Internet, 10/1995)
Can I dynamically load C user routines?
Can I dynamically load C user routines?
Yes, kinda. One package has been released that does this, by
Roberto Salama <rs@fi.gs.com>. He writes:
Here is a version of dylperl, dynamic linker for perl. The code here
is based on Oliver Sharp's May 1993 article in Dr. Dobbs Journal
(Dynamic Linking under Berkeley UNIX).
dyl.h
dyl.c - code extracted from Oliver Sharp's article
hash.h
hash.c - Berkeley's hash functions, should use perl's but could not
be bothered
dylperl.c - perl usersubs
user.c - userinit function
sample.c - sample code to be dyl'ed
sample2.c - "
test.pl - sample perl script that dyl's sample*.o
The Makefile assumes that uperl.o is in /usr/local/src/perl/... You
will probable have to change this to reflect your installation. Other
than that, just type 'make'...
The idea behind being able to dynamnically link code into perl is that
the linked code should become perl functions, i.e. they can be invoked
as &foo(...). For this to happen, the incrementally code must use the
perl stack, look at sample.c to get a better idea.
The few functions that make up this package are outlined below.
&dyl("file.o"): dynamically link file.o. All functions and non-static
variables become visible from within perl. This
function returns a pointer to an internal hash table
corresponding to the symbol table of the newly loaded
code.
eg: $ht = &dyl("sample.o")
This function can also be called with the -L and -l ld options.
eg: $ht = &dyl(""sample2.o", "-L/usr/lib", "-lm")
will also pick up the math library if sample.o
accesses any symbols there.
&dyl_find("func"): find symbol 'func' and return its symbol table entry
&dyl_functions($ht): print the contents of the internal hash table
&dyl_print_symbols($f): prints the contents of the symbol returned by dyl_find()
There is very little documentation, maybe something to do for a future
release. The files sample.o, and sample2.o contain code to be
incrementally loaded, test.pl is the test perl script.
Comments are welcome. I submit this code for public consumption and,
basically, am not responsible for it in any way.