[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
libtool 1.4.3 searches /usr/lib before -L<dir>
From: |
Pierre Sarrazin |
Subject: |
libtool 1.4.3 searches /usr/lib before -L<dir> |
Date: |
Mon, 20 Oct 2003 19:32:21 -0400 |
User-agent: |
Mutt/1.4.1i |
I'm having a problem related to the path that libtool (1.4.3)
uses to search for libraries.
I have a C++ package that contains a library and two command-line
tools. If I install this package through an RPM (on a RedHat 8.0
system), I endup with the lib*.la and lib*.so files in /usr/lib.
I get into trouble when I compile the sources of a newer version
of the package, while the older version is still installed.
For example, I deploy the newer version in /home/ps/cvswork/verbiste.
The library sources are in src/verbiste, and its .libs subdirectory.
The command-line tool sources are in src/commands. The library is
compiled first, then the command-line tools. The error happens when
trying to link the first of those tools.
The libtool command that is run by make is the following:
/bin/sh ../../libtool --mode=link g++ -g -Wall
-o french-conjugator
french_conjugator-french-conjugator.o french_conjugator-Command.o
-lxml2 -lpthread -lz -lm
-L../verbiste -lverbiste-0.1
The -L option correctly points to the src/verbiste directory, where the
newer library has been compiled. However, libtool generates this g++
command to do the linking:
g++ -g -Wall -o french-conjugator
french_conjugator-french-conjugator.o french_conjugator-Command.o
/usr/lib/libxml2.so -lpthread -lz -lm
-L/home/ps/cvswork/verbiste/src/verbiste
/usr/lib/libverbiste-0.1.so
The `-lverbiste-0.1' has been expanded to `/usr/lib/libverbiste-0.1.so'
because the older version of the library is currently installed as an
RPM under /usr. This causes a linking error because the older library
does not have the functions that are expected by the newer code:
/home/ps/cvswork/verbiste/src/commands/french-conjugator.cpp:110:
undefined reference to
`verbiste::FrenchVerbDictionary::getTenseName(verbiste::Tense)'
I wondered why libtool searched a system directory (/usr/lib) before
the explicitly specified one (../verbiste). I opened ../../libtool
and found this (backslash added by me):
for searchdir in $newlib_search_path $lib_search_path \
$sys_lib_search_path $shlib_search_path; do
# Search the libtool library
lib="$searchdir/lib${name}.la"
if test -f "$lib"; then
found=yes
break
fi
done
By inserting echo statements before this loop, I observed this (long
line cut by me):
newlib_search_path=' /usr/lib /home/ps/cvswork/verbiste/src/verbiste'
lib_search_path='/home/ps/cvswork/verbiste/src/commands
/home/ps/cvswork/verbiste/src/verbiste'
The directory specified with -L was added after /usr/lib.
This explains why libverbiste-0.1.la is found in /usr/lib instead
of where -L specified.
The workaround is to uninstall the older library, or at least to
move away /usr/lib/libverbiste-0.1.la.
Is there a clean way to ask libtool to search a certain directory
before any system directory?
My project is autoconfiscated with autoconf 2.57, automake 1.7.2
and libtool 1.4.3. Also, I use g++ 3.2 on a RedHat 8.0 system.
--
Pierre Sarrazin <sarrazip at sympatico dot ca>
- libtool 1.4.3 searches /usr/lib before -L<dir>,
Pierre Sarrazin <=