ViaVoice Tidbits

Doug Sutherland wearable at cogeco.ca
Sun Mar 14 10:50:50 EST 2004


Igor said:

 > Doug, this is sounding very interesting. Question though. Did you build
 > the latest gcc from source? Bc that may have something to do with your
 > problem, depending on whether or not the libstdc++.so you copied from
 > the Slackware Cd came from the same version of Gcc that you built.

Okay, I digged deeper into this. First off, viavoice doesn't work on
slackware 9.1, so this doesn't apply to that version. As far as I can
tell, viavoice won't work on any system built with glibc 3.2.2 or newer.
Slackware 9.1 uses glibc 3.2.2. Slackware 9.0 uses glibc 3.2.1.

On my built-entirely-from-source system, I used glibc 3.2.1 and gcc 3.2.1.
So I was using a different version of gcc that slackware 9. On that system
when I try to run viavoice, I get this:

libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or 
directory

If I try symbolic linking the above to the libstdc++ that was installed
from my source build (libstdc++.so.5.0.1), I get this

enu50.so: undefined symbol: cerr (enu50.so is the viavoice dictionary)

Now if I remove that link and copy the slackware 9.0 libstdc++-libc6.1-1.so.2
(which is a symblic link), and what it links to I have these:

libstdc++-libc6-1.1-2.9.0.so
libstdc++-libc6-1.1-2.so.2 -> libstdc++-2-libc6-1.1-2.9.0.so

If I include a path to those in /etc/ld.so.conf, then viavoice works.

Since I wasn't using the same gcc as slackware 9, I built a whole new
system from source using the same gcc (3.2.2) and glibc (3.2.1) as
slackware 9.0, to see if that would work. No luck! :) It gave the same
error trying to find libstdc++-libc6-1.1-1.so.2. Following the same
procedure as above, if I try linking that to the installed libstdc++
(this time libstdc++.so.5.0.2) I get the same error about undefined
symbol cerr (when viavoice's enu50.so tries to load). And just as
before, if I copy the slackware lib over ... it works ... grrr

Looking closer at slackware 9.0 libstdc++ libraries, it has many more
files than I do, it has all of these:

libstdc++.so.5.0.2
libstdc++.so.4.0.0
libstdc++.so.2.8.0
libstdc++.so.2.7.2.8
libstdc++-2-libc6.1-1-2.9.0.so
libstdc++-3-libc6.1-2-2.10.0.so
libstdc++-3-libc6.2-2-2.10.0.so

And these are not symbolic links, these are actual shared libraries.
My source build only created the first one libstdc++.so.5.0.2

It appears that slackware 9.0 created a bunch of compatibility libs,
but I'm not sure how it did that. Any idea how to get gcc to build
compatibility libs?

Also, the file of interest to viavoice is libstdc++-2-libc6.1-1.2-9.so
I don't have any files called libstdc++*libc6*
This seems to be some combination of C++ and glibc.
And that seems to be what I am missing.
This is quite annoying hee hee.

I have viavoice working but I'd like to figure out how to eliminate
having to copy binaries from slackware 9.0. Any ideas on how to build
these libstdc++ compatibility libs, or the ones that seem to refer to
libstdc++ and libc (like libstdc++-2-libc6.1-1.2.9.0.so)?

   -- Doug















More information about the Speakup mailing list