Hi all,

I'm hoping this is just a simple linker option, but
I've been reading "ld" manuals for the past few
hours and I just don't get it. :)

I'm trying to make a dynamically loaded PMC that
subclasses another dynamically loaded PMC.
I made two files in parrot/dynclasses/ :


// file 1: pisequence.pmc
#include "parrot/parrot.h"
#define enum_class_PiSequence  -1
pmclass PiSequence need_ext dynpmc {
  INTVAL get_integer () {
    return 0;
  }
}


// file 2: piobject.pmc
#include "parrot/parrot.h"
#define enum_class_PiString  -1
pmclass PiString extends PiSequence need_ext dynpmc  {
}


I added these to the Makefile, ran make -C dynclasses
and now, I have two *.so files:

% find runtime -name "pi*.so"
runtime/parrot/dynext/pisequence.so
runtime/parrot/dynext/pistring.so

Then I try to run this:

.sub __main__

    loadlib P0, "pisequence"
    find_type I0, "PiSequence"
    print I0
    print "\n"

    loadlib P1, "pistring"
    find_type I1, "PiString"
    print I1
    print "\n"

    end
.end


Output is:


Couldn't load 'runtime/parrot/dynext/pistring': \
    runtime/parrot/dynext/pistring: cannot open shared object file: \
    No such file or directory
51
Couldn't load 'runtime/parrot/dynext/pistring': \
    runtime/parrot/dynext/pistring: cannot open shared object file: \
    No such file or directory
0


If I copy the get_integer function to PiString
instead of trying to inhert, everything works:


51
52


It seems the problem is that pistring.so can't
load because it can't find a definition for
Parrot_PiSequence_get_integer... Even though
it's defined in the other *.so file that's
already loaded.

I don't think this is a bug... I think I just
don't know what I'm doing. Can someone help? :)

Sincerely,

Michal J Wallace
Sabren Enterprises, Inc.
-------------------------------------
contact: [EMAIL PROTECTED]
hosting: http://www.cornerhost.com/
my site: http://www.withoutane.com/
--------------------------------------

Reply via email to