[freetds] FreeTDS 0.61 Compile Problem

Steve Langasek vorlon at netexpress.net
Tue Jul 15 00:41:59 EDT 2003


On Sun, Jul 13, 2003 at 04:22:24PM -0400, James K. Lowden wrote:
> I'll do some more checking.  Below is the configure.in test for readline. 
> Freddy added it a year ago, and I imagine he found it elsewhere.  I'm not
> sure what to change; afaict we're doing as you suggest, unless tputs(3) is
> intrinsically different from tgetent(3).  

> dnl readline test
> dnl Readline is needed by the tty session. Set up a special RL_LIBS
> dnl substitution for it.
> OLDLIBS="$LIBS"
> dnl Readline is linked with curses, and on some systems termcap must be
> dnl linked in. Others (inc debian) have termcap built into ncurses.
> LIBS=""
> AC_SEARCH_LIBS(tgetent, [readline ncurses curses termcap])
>                ^^^^^^^   ^^^^^^^^ Good, no?  
> AC_CHECK_LIB([readline], [readline], [LIBS="$LIBS -lreadline"
>   AC_DEFINE(HAVE_READLINE, 1, [Define to 1 if you have the GNU Readline
> library.])] )
> READLINE_LIBS="$LIBS"
> AC_SUBST(READLINE_LIBS)
> LIBS="$OLDLIBS"

This adds -lreadline after the other libs that have been detected, which
is incorrect on many platforms; the linker is not required to keep track
of symbols that have not been requested, so every library must have its
dependencies listed *after* it on the link line (on platforms where they
must be specified at all).

LIBS="-lreadline $LIBS" is probably what's wanted above.

> > I find it frustrating.  It makes me wonder if the world of
> > Linux is starting to look like the world of M$.  :-(

> In this way: management of shared library dependency information is a
> thankless task that no one wants to do.  We create one itsy bitsy teewny
> weeny yellow polka dot library here (OK, four), and have a dickens of a
> time keeping straight what major/minor numbers to bump when.  Multiply our
> problem by (something like) the square of the number of libraries on a
> typical system, and you have a fair proxy for the size of the problem.  

With the apparent exception of Slackware, this is not a Linux problem;
by and large, it's a problem caused by proprietary Unices with crufty or
incomplete shared library handling.  The GNU linker provides mature,
scalable handling of interlibrary dependencies:

$ objdump -p /usr/lib/libreadline.so|grep NEEDED
  NEEDED      libtermcap.so.2
  NEEDED      libc.so.6
$

On a good platform, you specify only the libraries that *you* need, not
the ones that *they* need.  Unfortunately, there's a tendency for Open
Source developers to be willing to sink countless hours into their build
scripts, to work around the limitations of stagnant, dead-end platforms
in the name of "portability".

Not forgiving libtool any time soon,
-- 
Steve Langasek
postmodern programmer



More information about the FreeTDS mailing list