Thanks for the answer. 

> So the only way to get it working is to revert the decision in the
> Apache source as to when to use the native dlopen or the emulation
> layer. change the file src/os/unix/os.c to not check for AIX < 43 to
> always include os-aix-dso.c. You also will have to make sure that the
> patch for perl itself is installed as per the modperl INSTALL file,
> it contains an important bugfix for the DSO case.
src/os/unix/os.c is easy, but in modperl INSTALL file, there is a patch
against perl 5.03. I currently try to use perl 5.6.0.

I did pathed the file by hand, the changes made sense, but it won't compile:

  Making DynaLoader (static)
        gcc -c  -D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE
-fno-strict-aliasing -I/usr/local/include -O2      -DVERSION=\"1.04\"
-DXS_VERSION=\"1.04\"  -I../.. -DPERL_CORE -DLIBC="/lib/libc.a" DynaLoader.c
In file included from DynaLoader.xs:39:
/usr/include/ldfcn.h:239: warning: `FREAD' redefined
/usr/include/fcntl.h:217: warning: this is the location of the previous
definition
/usr/include/ldfcn.h:242: warning: `FWRITE' redefined
/usr/include/fcntl.h:218: warning: this is the location of the previous
definition
DynaLoader.xs: In function `dlopen':
DynaLoader.xs:285: `mainModule' undeclared (first use in this function)
DynaLoader.xs:285: (Each undeclared identifier is reported only once
DynaLoader.xs:285: for each function it appears in.)
make: 1254-004 The error code from the last command is 1.

Well ... it seems that perl 5.03 used mainModule, but perl 5.6.0 do not.
What should I use instead of the patch fragment

       @@ -222,7 +220,16 @@
                          mp->refCnt = 1;
                          mp->next = modList;
                          modList = mp;
                  -       if (loadbind(0, mainModule, mp->entry) == -1) {
                  +       /*
                  +        * Assume anonymous exports come from the module
this dlopen
                  +        * is linked into, that holds true as long as
dlopen and all
                  +        * of the perl core are in the same shared object.
Also bind
                  +        * against the main part, in the case a perl is
not the main
                  +        * part, e.g mod_perl as DSO in Apache so perl
modules can
                  +        * also reference Apache symbols.
                  +        */
                  +       if (loadbind(0, (void *)dlopen, mp->entry) == -1
||
                  +           loadbind(0, mainModule, mp->entry) == -1) {
                                  dlclose(mp);
                                  errvalid++;
                                  strcpy(errbuf, "loadbind: ");

Or perhaps this patch isn't required against perl 5.6.0 ? 

Aivo Kalu, [EMAIL PROTECTED] 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to