I'm trying to embed perl in a C++ application and have some perl modules
call back into the C++.  I cannot figure out how to make the bootstrap
work on my callback module.  When I eval "use Callback;" I get "Can't
locate loadable object for module Callback in @INC" even though the
Callback stuff is linked in.  It shouldn't be looking for a .so file.
The DynaLoader stuff works fine for other modules.

Here's what I got:

Makefile:
        OBJS = main.o perlxsi.o callbackxs.o
        ...
        main : $(OBJS) # my callbackxs.o should link in here fine, right?
                $(CC) -o $@ $^ $(PERLLD)

        callbackxs.o : callback.xs
                xsubpp callback.xs > callbackxs.cpp
                $(CC) -c callbackxs.cpp $(PERLCXX)  # compiles fine.
        ...

perlxsi.c:
        EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
        EXTERN_C void boot_Callback (pTHX_ CV* cv);
        
        EXTERN_C void
        xs_init(pTHX)
        {
                char *file = const_cast<char*>( __FILE__ );
                dXSUB_SYS;
                newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
                newXS("Callback::boot_Callback", boot_Callback, file);
        }

main.cpp:
        perl_parse(my_perl, xs_init, arg_count, const_cast<char**>(args), 
NULL); # dynaloader works fine

I can see "XS(boot_Callback)" defined just fine in the code spat out by
xsubpp on my xs file.

What gives?  What's the missing step to tell perl about linked in module
code?

Reply via email to