I appear to be posting a lot to this list, so I'll try and keep this
brief. Out of CVS, Xerces compiles to a shared .so library (talking
Linux here). I then need to include libxerces.so with an application
when distributing it, and hence users must configure their
LD_LIBRARY_PATH or have access to put the .so in (eg) /usr/lib.

This is possible for a user to mess up[1], so in the past I've linked
against .a versions of XML parser libraries, and just distributed the
resulting executable. I'm now trying to do this with Xerces. Replacing
the final g++ execution of the build process (g++ -DLINUX -shared -fpic
-o libxerces-c1_0.so ...) with a call to "ar" and then to "ranlib"
produces libxerces.a which I can happily link against. When I attempt to
run the binary on another (clean, no Xerces or ICU or anything
installed) machine, it complains with:

The Xerces-C system could not be initialized.
If you are using ICU, then the most likely reason for this failure
is the inability to find the ICU coverter files. [etc]

I didn't think I was using ICU, since in my original runConfigure
invocation I specified the internal transcoder. Also, if I link against
the .so version, copy it to the clean machine, set up my LD_LIBRARY_PATH
and run my executable, it works fine without asking for the ICU files.

Yikes, that wasn't as brief as I'd hoped. Any hints appreciated,

Mike.

[1] Of course, I could be insulting a lot of Linux users here, but on
Windows it's a case of "download, unzip, run" and I'd like the Linux
version to be as easy.

Reply via email to