"Lincoln A. Baxter" <[EMAIL PROTECTED]> writes:
> I have been trying to build the perl XML::Xerces module for two days
> now.
Sorry, that sounds painful. I hope we can help you get it running. I
just discovered gentoo the other day, it looks like a valuable
distribution. I do all my development on debian as I find I can't live
without the debian package manager.
> I am running on a current gentoo linux system, and have need to get this
> working on a Solaris 8 system at work. If I cann't get this to work on
> a linux system (usually the easiest to get things to build on), I doubt
> I'll be about to succeed in solaris land.
Yes, linux is usually much simpler than Solaris.
> I have built the xerces c++ libraries from source (version 2.3.0 since
> that is what the CPAN module requires), following the instructions on
> the apache website. It builds and installs fine.
Ok, that should eliminate compiler version problems.
> I then go to build XML::Xerces, and everything builds fine.
> make test however fails to load Xerces.so with an undefined symbol
> error: .../XML-Xerces-2.3.0-4/blib/arch/auto/XML/Xerces/Xerces.so:
> undefined symbol: _ZTI19PerlCallbackHandler at
> /usr/lib/perl5/5.8.0/i686-linux/DynaLoader.pm line 229.
>
> It looks like we are running afoul of C++ name mangling, but I get the
> same result whether XML::Xerces is built with gcc or g++.
gcc will auto detect a C++ file and run g++, so that is not the
problem.
You are getting a dynamic loading error that is triggered by
Test::Harness - it uses a loader flag that causes an error if you have
any undefined symbols in your library. Sometimes this is the result of
a single misnamed symbol, and sometimes this is indicative of a bigger
problem like not locating the proper version of a library, or building
C++ libraries with different compilers or compiler versions.
Try just running a single test on the command line:
perl -w -Mblib t/actualCast.t
and see if it runs at all - if it does than it might be a minor
issue, if not something bigger is happening.
The symbol the loader is complaining about is from the callback
handler library, Handler.a, built in the Handler/ directory. Try
looking for the symbol:
$ nm blib/arch/auto/Handler/Handler.a |grep ZTI19PerlCallbackHandler
00000000 V _ZTI19PerlCallbackHandler
U _ZTI19PerlCallbackHandler
U _ZTI19PerlCallbackHandler
U _ZTI19PerlCallbackHandler
Is what I get. This is some code that is hand-written to handle
registration of callback methods - like ErrorHandler's,
ContentHandler's, EntityResolver's, etc. Xerces expects a C++ object
so we must do some fancy footwork to be able to register Perl object's
instead. Up until very recently this code was giving me a *big*
headache, but with a recent upgrade of gcc the issue resolved and
enabled me to make the code much simpler and cleaner. Perhaps this is
what is causing the problem - I'm using gcc-3.2.3.
> With this last build, I made sure I built the xerces library WITHOUT
> thread support (since my perl is built without thread support).
Hmmm... My Perl is also built without thread support, but I build
xerces-c *with* thread support (the default), but I don't think this
is the issue.
> Various other tries using various build parameters have all yeilded
> the same basic results (but with difference symbols being
> undefined).
Which ones?
I'd also like to see the output of make for XML-Xerces, perhaps it is
informative.
Cheers,
jas.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]