c_libraries

This is part of The Pile, a partial archive of some open source mailing lists and newsgroups.



From: Jan Carlson <janc@iname.com>
Date: Sat, 24 Apr 1999 00:40:59 -0400
Subject: Re: What Netscape File?


Donald Carpenter wrote:
> 
> Jan Carlson wrote:
> 
> > Donald Carpenter wrote:

> > > You didn't say if you were running an Intel or Alpha
> > > system.  But if your running an Intel system, then
> > > this Netscape
> > > http://rpmfind.net/linux/RPM/contrib/libc5/i386/communicator-4.5-1.i386.html

> > No, that's the wrong one.  You want glibc, not libc5!

> I'm relatively new to Linux, but I installed that netscape
> on my box and it's working fine. That's why I suggested
> it.  If it's the wrong one, why is it working on my RH 5.2
> system?  (a question not sarcasm)

libc5 is the old nasty libc.  glibc2 = libc6 is the nice new one that
Red Hat and the rest of Linux distros are moving to, or will.

Red Hat tries to support nasty old libc5 too, and Red Hat is good at
what they do, so the nasty old libc5 Netscape may work ok
for awhile.

Why does Netscape 'support' libc5 and not glibc?  It's the lowest
common denominator.  But in this case the lcd is not as stable,
for many.

===

Subject: Compiling Berkeley DB2 shared libraries
From: "Kevin Myer" <kevin_myer@elanco.k12.pa.us>
Date: Fri, 16 Apr 1999 12:06:31 -0400 (EDT)


Hi,

I have been attempting to get the Sleepycat Berkeley DB2 libraries,
version 2.7.3, installed on my system.  At first, they weren't showing up
at all when I ran ldconfig.  Then, I realized that they were just compiled
as static libraries so of course they weren't going to show up.  So I read
some more documentation and found these instructions for making a shared
library:

(add -fpics to the CFLAG in the Makefile)

mkdir tmp
cd tmp
ar xv ../libdb.a
gcc -shared -o libdb.so *.o

This extracted the symbols and created what appeared to be a shared
library.  It shows up in the list of shared libraries now but when I
attempted to compile a program (like OpenLDAP) it finds the header files,
recognizes that they are DB2, but it never finds the DB2 library.  I
thought I could just symbolically link /lib/libdb.so.2 to
/usr/local/BerkeleyDB/lib/libdb.so but that didn't work either - running
ldconfig relinks it with /lib/libdb-2.0.7.so.

I'm thinking it must be a version problem - at compile time, it thinks
that libdb-2.0.7.so is newer than libdb.so but I don't know how to get
around it.

Any pointers or help on this matter would be greatly appreciated.  


Thanks,

Kevin

==========

Subject: Re: Compiling Berkeley DB2 shared libraries
From: "Igor S. Livshits" <igorl@life.uiuc.edu>
Date: Fri, 16 Apr 1999 11:20:36 -0500


At 12:06 PM -0400 on 4/16/99, Kevin Myer wrote:
>Hi,
>
>I have been attempting to get the Sleepycat Berkeley DB2 libraries,
>version 2.7.3, installed on my system.  At first, they weren't showing up
>at all when I ran ldconfig.  Then, I realized that they were just compiled
>as static libraries so of course they weren't going to show up.  So I read
>some more documentation and found these instructions for making a shared
>library:
>
>(add -fpics to the CFLAG in the Makefile)
>
>mkdir tmp
>cd tmp
>ar xv ../libdb.a
>gcc -shared -o libdb.so *.o

I'd recommend that you keep your locally compiled and packaged stuff 
separately. To that end, grab the latest gcc, pgcc, or egcs (I used 
gcc-2.8.1 on one system and egcs-1.1.2 on another) and compile and 
install it in your /usr/local/ hierarchy. Then, recompile Berkeley DB 
with the new compiler, and run make install which will add stuff to 
the /usr/local/BerkeleyDB/ hierarchy. Follow the steps to produce a 
shared version of Berkely DB and add it to /usr/local/BerkeleyDB/lib/.

Finally, make links in /usr/local/lib/, /usr/local/include, and 
/usr/local/bin to the corresponding items within 
/usr/local/BerkeleyDB.

Also, add /usr/local/lib to your /etc/ld.so.conf and run ldconfig.

You'll now be ready to compile and link against the new libraries 
without any worries of stomping on stuff packaged by RedHat or others 
using legacy libraries and gcc-2.7.2.*.

Here's a summary of the BerkeleyDB-2.7.3.1 steps I took on my system:

Install Berkeley DB 2.7.3
	patch -p0 < ../archives/db-2.7.3-patches/patch.2.7.3.*
	cd build_unix
	env CC=gcc ../dist/configure --enable-compat185
	make
	make install

	build a shared library as per 
<http://www.sleepycat.com/docs/build/shared.html>
		cp -r build_unix build_shlib
		cd build_shlib
		make clean
		patch < ../../site/db.shlib.patch
		make
		mkdir tmp
		cd tmp
		ar xv ../libdb.a
		gcc -shared -o libdb.so *.o
		mv libdb.so /usr/local/BerkeleyDB/lib/

	[inherited] create links in /usr/local/bin/, /usr/local/lib/, and 
/usr/local/include/
		ln -s ../BerkeleyDB/bin/db_* .
		ln -s ../BerkeleyDB/lib/libdb* .
		ln -s ../BerkeleyDB/include/db* .
		ldconfig

==========


Subject: Re: Compiling Berkeley DB2 shared libraries
From: "Kevin Myer" <kevin_myer@elanco.k12.pa.us>
Date: Fri, 16 Apr 1999 15:35:45 -0400 (EDT)


On Fri, 16 Apr 1999, Igor S. Livshits wrote:

> I'd recommend that you keep your locally compiled and packaged stuff 
> separately. To that end, grab the latest gcc, pgcc, or egcs (I used 
> gcc-2.8.1 on one system and egcs-1.1.2 on another) and compile and 
> install it in your /usr/local/ hierarchy. Then, recompile Berkeley DB 
> with the new compiler, and run make install which will add stuff to 
> the /usr/local/BerkeleyDB/ hierarchy. Follow the steps to produce a 
> shared version of Berkely DB and add it to /usr/local/BerkeleyDB/lib/.

I have already done this.  I am using pgcc 1.1.1 and Berkeley DB2 v2.7.3.
Everything compiles fine.  Everything installs fine.  The shared library
is generated fine.  But nothing seems to include it in a compile.  All
tests for DB2 fail.  /usr/local/Berkeley/lib is in my /etc/ld.so.conf,
ldconfig was run many times, the shared library shows up as being in the
linker's cache BUT nothing seems to compile against it.

For example, if I run configure, trying to setup OpenLDAP 1.2.1, it barfs

./configure --with-ldbm-api=db2
[stuff deleted]

checking for DB2 library... checking for db_open in -ldb... no
no
checking for db.h... yes
checking if db.h is DB2... yes
checking for Berkeley DB2... no
configure: warning: could not find suitable LDBM backend
configure: error: select appropriate LDBM options or disable

ldconfig shows that:

/usr/local/BerkeleyDB/lib:
        libdb-2.7.3.so => libdb-2.7.3.so

and this is symlinked in /usr/local/lib

I guess my question should have been - how do I force a program to use a
particular version of a library?  Better yet, why isn't the linker smart
enough to figure out that one version of the db libraries is just plain
ole Berkeley DB while the other is Berkeley DB2?

I just want to take advantage of the newer features in DB2 - WAHHHHH!

More to the point - I know how to make the shared library and have it
recognized by the linker.  However, why won't it compile DB2 related
stuff?  Is there some sort of internal version number with shared
libraries that might be lower on the DB2 library than the legacy db
library?  Hrm, or maybe the DB2 test routines in the configure script for
openLDAP are broken...any ideas to try??

Kevin

=============

Subject: Re: Making StarOffice work with glibc-2.1
From: Jan Carlson <janc@iname.com>
Date: Tue, 04 May 1999 14:12:57 -0400


"John N. Alegre" wrote:
> 
> NOT THE PROBLEM.
> 
> The problem is that upgrading anywhere past libc-2.0.7 breaks StarOffice.  Sure
> you can go back and do a virgin install, but that will break everything that
> needs libc-2.1.1, which is most things in RH 6.0.
> 
> The problem is finding a place to put the old libc and getting SO to find it
> before it finds the new one.  Right answer gets super kudos from the list.

The solution is a 'wrapper' script for each of the
StarOffice executables.

1. Make a directory called /lib/rh52/

2. Copy libc-2.0.7 into /lib/rh52/

3. Set permissions on the new directory and libc-2.0.7
   to be the same as their counterparts /lib and libc-2.1.1.

4. Find the executable for staroffice.  
   Suppose it's /opt/Office50/bin/so.
   Make a new directory, say /opt/Office50/bin/rh52 and move
   all unhappy StarOffice executables into it.

5. Make a script /opt/Office50/bin/so (same exactly as old executable),
   containing:

#!/bin/bash
ME=$(basename $0)
LD_LIBRARY_PATH=/lib/rh52 /opt/Office50/bin/rh52/$ME $*

Make a script by the name of each executable you moved,
to take its place.

I don't know if this will work for StarOffice, but it probably
will - It does work for xcdroast which has a similar problem,
but with the tcl library instead. 


===


Subject: Re: glibc
From: Rob Napier <rnapier@employees.org>
Date: Thu, 6 May 1999 09:54:23 -0400


glibc-2.1 is known to be incompatible with some products, notably
StarOffice.

Personally I'd hold off on glibc-2.1 unless you have packages that
need it.

If you do choose to install it, there's a compat-glibc-5.2-2.0.7.1.rpm
and compat-libs-5.2-1.rpm out there that are supposed to provide all
the old libraries. You can then use LD_LIBRARY_PATH to choose which
set of libraries you want to use. Haven't tried this because I've seen
no reason to go to glibc-2.1 at this point.

===

Subject: Re: Someone please explain to me the Berkeley DB mess in RH 6.0
From: "Steve \"Stevers!\" Coile" <scoile@redhat.com>
Date: Wed, 12 May 1999 07:42:55 -0400 (EDT)


[The DB saga according to Jeff Johnson, one of our developers.  Note that
this is not an "official" Red Hat statement.  I asked about this on an
internal mailing list and Jeff was kind enough to give me permission to
repost his response.  -sjc]

There are three Berkeley DB libraries shipped with Red Hat 6.0. (Actually
there are two libraries, one of which has a (broken!) backward compatible
interface, but for the purposes of this discussion there are 3 ways to
try to use Berkeley DB libraries).

LIBRARY1) The db-1.85 that has always been part of linux.
	To include:	#include <db1/db.h>
	To link:	-ldb1

LIBRARY2) The newer db-2.x.y library with an incompatible interface.
	To include:	#include <db.h>
	To link:	-ldb

LIBRARY3) The newer db-2.x.y library with a compatible interface but
(broken!) incompatible database format.
	To include:	#include <db_185.h>
	To link:	-ldb

All Red Hat 6.0 packages (except glibc) should use LIBRARY1 because a)
LIBRARY3 has a (broken!) incompatible on-disk database format. Symptoms
are EINVAL returned (see symptom in text below).  b) LIBRARY2 has
(except for glibc) a restrictive commercial license.

[Cristian Gafton, our lead developer, responds with:  Actually, LIBRARY3
is not exactly broken. The on disk format is changed and matches the one
of LIBRARY2. Thus the only difference between the lib2 and lib3 above
are the programming interfaces used. There is no was to ensure binary
backwards compatibility between db-2 and the older db-1.85.]

Everything would be hunky-dory EXCEPT that LIBRARY1 needs explicit
changes to force it's use. Consequently many, many packages are gonna
configure against LIBRARY2 or LIBRARY3 and will need to be forced to
build against LIBRARY1 for the Right Thing To Happen.

To further obscure the issue: It's OK to use db2 with glibc.  Several
programs (NIS database management programs come to mind) that are part of
the glibc package may very well do that. That means that tools that want
to access those data bases will probably have to be built to use something
other than LIBRARY1. [...]

Oh, yeah the sonames of the shared libraries are gonna confuse everybody
too.  AFAIK, you can sort out what's what using ldd as follows

LIBRARY1		/lib/libdb1.so.2 -> libdb1-2.1.1.so
(glibc-2.0.7 compat)	/lib/libdb.so.2 -> libdb1-2.1.1.so
LIBARRY2		/lib/libdb.so.3	-> libdb-2.1.1.so
LIBARRY3		/lib/libdb.so.3	-> libdb-2.1.1.so

And then there's the file(1) problem -- I'll try to fix this one.

And, to address the gentleman's problem, he needs to include <db1/db.h>
and link with -ldb1 just like the Red Hat 6.0 sendmail does and forget
about using db_dump and db_dump185. At least I think that will work ...

[Cristian adds: He will need a compatibility DB_File module, built against
the db-1.85 library - I will get this out as part of the powertools.]

===

Subject: Re: Broken Glint
From: Jan Carlson <janc@iname.com>
Date: Wed, 07 Apr 1999 00:50:07 -0400

Bruce Richardson wrote:
> 
> Upgrading tcl/tk to 8.04 (or possibly upgrading python) seems to have
> broken Glint. If I select some packages and then click on Upgrade, it does
> the job but Glint stops updating it's display from that point - I have to
> click on the close button for the progress bar and the Installed/Available
> windows show false information from then on.
> 
> Unfortunately, Red Hat don't seem to be developing Glint any further (this
> is a shame - gnorpm may be prettier but it has no equivalent to Glint's
> Installed/Available interface, a big victory for style over content).
> Anyone know how I can fix Glint?

Keep 2 copies of the tcl library, or whatever library
is giving glint fits.  Point glint to the copy
it likes.  It will be happy.

How?

Reinstall the old tcl rpm that makes glint work.
rpm -Uvh --oldpackage tcl-oldversion.rpm

Go to /usr/lib.   

    cp libtcl8.0.so libtcl7.9.so

but be sure the two names have the same number of characters.

Then emacs (not vi) /usr/bin/glint and change
libtcl8.0 to libtcl7.9 inside glint, and save.  
Don't let emacs put a newline at the end of glint!

Now reinstall the tcl version you really wanted.
Glint is now pointed to the tcl it likes, and
your other programs will use the other one.

It's also a fix that tends to get wiped out
as I upgrade, but it's sometimes better than waiting for
new packages that cooperate.

I did this to xcdroast because 'wish' hates
tcl that xcdroast likes.  make xconfig uses wish,
so I need wish to work.

Anybody have a cleaner way to make xcdroast and
'wish' work at the same time, besides recompiling
one of them?


===

Subject: Re: Broken Glint, redhat-digest Digest V99 #768
From: "Walter  B Kulecz, PhD" <wally@wahine.jsc.nasa.gov>
Date: Wed, 07 Apr 1999 10:45:09 -0500


>Anybody have a cleaner way to make xcdroast and
>'wish' work at the same time, besides recompiling
>one of them?
>
What's wrong with the standard wrapper method where you move the old
library to say /usr/local/lib/libtcl8.0.so.

If /usr/local/bin is first in your path all you need to do is create an
executable file named glint

#!/bin/shell
export LD_PRELOAD=/usr/local/lib/libtcl8.0.so
/usr/bin/glint $*

if /usr/bin is searched first then you need to rename glint and use the new
name in the shell script.

===

Subject: Re: a.out-type compatibility gone?
From: Steve Borho <sborho@ststech.com>
Date: Tue, 6 Jul 1999 14:46:30 -0500


On Tue, Jul 06, 1999 at 03:32:32PM -0400, Tasos Kotsikonas wrote:
> Is anyone having problems running mwm under 6.0?  My executable is
> statically linked, and of the a.out type, and it appears the new
> kernels have dropped the backward compatibility for that executable
> format. 
> 
> Do you have any suggestions as to how I might be able to run the
> mwm executable on redhat 6?

try:

modprobe binfmt_aout

===


the rest of The Pile (a partial mailing list archive)

doom@kzsu.stanford.edu