#include #include #include "XSUB.h" void boot_DynaLoader (pTHX_ CV* cv); void xs_init(pTHX) { static const char file[] = __FILE__; dXSUB_SYS; PERL_UNUSED_CONTEXT; newXS( "DynaLoader::boot_DynaLoader", boot_DynaLoader, file ); } int main( int argc, char **argv, char **env ) { PerlInterpreter *my_perl; PERL_SYS_INIT3( &argc, &argv, &env ); my_perl = perl_alloc(); perl_construct(my_perl); perl_parse( my_perl, xs_init, argc, argv, env ); int result = perl_run(my_perl); perl_destruct(my_perl); perl_free(my_perl); PERL_SYS_TERM(); return result; } #### $ cd /tmp/foo $ ls myapp myperl.so $ ./myapp Hello, world! #### $ cd $ ls /tmp/foo myapp myperl.so $ /tmp/foo/myapp /tmp/foo/myapp: error while loading shared libraries: myperl.so: cannot open shared object file: No such file or directory #### int main( int argc, char **argv, char **env ) { /* find path to shared library */ /* open shared lib */ void *handle = dlopen(...); /* Get entry point for perl_alloc */ void* (*perl_alloc)(); perl_alloc = (void*())dlsym(handle, "perl_alloc") /* Call perl_alloc */ my_perl = (*perl_alloc)(); /* and so on */ /* ... */ }