[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: problems with LD_LIBRARY_PATH and libtool wrapper
From: |
Dan McMahill |
Subject: |
Re: problems with LD_LIBRARY_PATH and libtool wrapper |
Date: |
Tue, 19 Aug 2008 21:55:19 -0400 |
User-agent: |
Thunderbird 2.0.0.16 (Windows/20080708) |
Ralf Wildenhues wrote:
Hi Dan,
* Dan McMahill wrote on Wed, Aug 13, 2008 at 11:06:41PM CEST:
I have a problem with the LD_LIBRARY_PATH handling inside of the libtool
wrapper. I see a line like:
# Add our own library path to LD_LIBRARY_PATH
LD_LIBRARY_PATH="/usr/pkg/lib:/home/dan/src/myprog/libmine/.libs:$LD_LIBRARY_PATH"
in /home/dan/src/myprog/src/myprog which is the libtool wrapper.
The problem is I may have an out of date libmine installed in
/usr/pkg/lib and at runtime I pick that one up instead of the one in
/home/dan/src/myprog/libmine/.libs. This has caused me great confusion
a couple of times when I absolutely could not correlate the behavior of
the program with the sources in ../libmine because of course they didn't
match.
It seems that we want to make sure any ".libs" directories appear first
in LD_LIBRARY_PATH.
Am I missing something obvious here?
Could be. Does myprog have an
myprog_LDADD = ../libmine/libmine.la
myprog_LDADD = @LIBMINE_LDADD@
and at configure time @LIBMINE_LDADD@ either gets set to
../libmine/libmine.la or something like -L/usr/pkg/lib -lmine. There is
a configure time option that says to either use a local build of the
library or use an already installed one. This was done because there
are actually about 5 different programs that all use libmine that are
all included in the tarball. This lets a third party packaging system
add the individual programs more easily. The programs are all just
different front ends (gtk, cgi, commandline, scilab, octave, etc) to
libmine.
One thing I have realized is I do not have any version set for libmine
which is clearly not a good thing.
line, and can you show the libtool link command lines for both the
library and the program plus all of their output when executed?
Here is the link lines for the library (libwcalc)
/bin/ksh ../libtool --tag=CC --mode=link gcc -g -O2 -Wall -o
libwcalc.la
-rpath /usr/local/lib air_coil.lo air_coil_loadsave.lo bars.lo
bars_loadsave.lo
coax.lo coax_loadsave.lo coplanar.lo coplanar_loadsave.lo
coupled_microstrip.lo
coupled_microstrip_loadsave.lo coupled_stripline.lo
coupled_stripline_loadsave.lo defaults.lo ic_microstrip.lo
ic_microstrip_loadsave.lo mathutil.lo microstrip.lo
microstrip_loadsave.lo misc.lo stripline.lo stripline_loadsave.lo
units.lo wcalc_loadsave.lo -lm
gcc -shared .libs/air_coil.o .libs/air_coil_loadsave.o .libs/bars.o
.libs/bars_loadsave.o .libs/coax.o .libs/coax_loadsave.o
.libs/coplanar.o .libs/coplanar_loadsave.o .libs/coupled_microstrip.o
.libs/coupled_microstrip_loadsave.o .libs/coupled_stripline.o
.libs/coupled_stripline_loadsave.o .libs/defaults.o
.libs/ic_microstrip.o .libs/ic_microstrip_loadsave.o .libs/mathutil.o
.libs/microstrip.o .libs/microstrip_loadsave.o .libs/misc.o
.libs/stripline.o .libs/stripline_loadsave.o .libs/units.o
.libs/wcalc_loadsave.o -lm -Wl,-soname -Wl,libwcalc.so.0 -o
.libs/libwcalc.so.0.0
(cd .libs && rm -f libwcalc.so.0 && ln -s libwcalc.so.0.0 libwcalc.so.0)
(cd .libs && rm -f libwcalc.so && ln -s libwcalc.so.0.0 libwcalc.so)
ar cru .libs/libwcalc.a air_coil.o air_coil_loadsave.o bars.o
bars_loadsave.o c
oax.o coax_loadsave.o coplanar.o coplanar_loadsave.o
coupled_microstrip.o coupled_microstrip_loadsave.o coupled_stripline.o
coupled_stripline_loadsave.o defaults.o ic_microstrip.o
ic_microstrip_loadsave.o mathutil.o microstrip.o microstrip_loadsave.o
misc.o stripline.o stripline_loadsave.o units.o wcalc_loadsave.o
ranlib .libs/libwcalc.a
creating libwcalc.la
(cd .libs && rm -f libwcalc.la && ln -s ../libwcalc.la libwcalc.la)
and here is the link for the program:
/bin/ksh ../libtool --tag=CC --mode=link gcc -g -O2 -Wall
-Wl,-R/usr/pkg/lib
-Wl,--rpath -Wl,/usr/pkg/lib -Wl,-R/usr/X11R6/lib -L/usr/pkg/lib
-L/usr/X11R6/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -lXi -latk-1.0
-lgdk_pixbuf-2.0 -lpangocairo-1.0 -lXrandr -lXext -lXcursor -lXfixes
-lcairo -lpangoft2-1.0 -lfontconfig -lfreetype
-lz -lpango-1.0 -lm -lXrender -lX11 -lgobject-2.0 -lgmodule-2.0
-lglib-2.0 -lintl -o wcalc about.o alert.o air_coil_gui.o bars_gui.o
coax_gui.o coplanar_gui.o coupled_microstrip_gui.o
coupled_stripline_gui.o epscat.o files.o gtk-units.o ic_microstrip_gui.o
menus.o microstrip_gui.o print.o start.o stripline_gui.o version.o
wcalc.o AWG.o permeability.o permitivity.o resistivity.o units.o ../lib
wcalc/libwcalc.la -lm
mkdir .libs
gcc -g -O2 -Wall -Wl,-R/usr/pkg/lib -Wl,--rpath -Wl,/usr/pkg/lib
-Wl,-R/usr/X11R6/lib -o .libs/wcalc about.o alert.o air_coil_gui.o
bars_gui.o coax_gui.o coplanar_gui.o coupled_microstrip_gui.o
coupled_stripline_gui.o epscat.o files.o gtk-units.o ic_microstrip_gui.o
menus.o microstrip_gui.o print.o start.o stripline_gui.o version.o
wcalc.o AWG.o permeability.o permitivity.o resistivity.o units.o
-L/usr/pkg/lib -L/usr/X11R6/lib /usr/pkg/lib/libgtk-x11-2.0.so
/usr/pkg/lib/libgdk-x11-2.0.so -lXi /usr/pkg/lib/libatk-1.0.so
/usr/pkg/lib/libgdk_pixbuf-2.0.so
/usr/pkg/lib/libpangocairo-1.0.so /usr/pkg/lib/libXrandr.so -lXext
/usr/pkg/lib/
libXcursor.so /usr/pkg/lib/libXfixes.so /usr/pkg/lib/libcairo.so
/usr/pkg/lib/libglitz.so /usr/pkg/lib/libpng12.so -lSM -lICE
/usr/pkg/lib/libpangoft2-1.0.so /usr/pkg/lib/libfontconfig.so
/usr/pkg/lib/libexpat.so /usr/pkg/lib/libfreetype.so
/usr/pkg/lib/libz.so /usr/pkg/lib/libpango-1.0.so
/usr/pkg/lib/libXrender.so -lX11 /usr/pkg/lib/libgobject-2.0.so
/usr/pkg/lib/libgmodule-2.0.so /usr/pkg/lib/libglib-2.0.so
/usr/pkg/lib/libintl.so -lc ../libwcalc/.libs/libwcalc.so -lm -Wl,
--rpath -Wl,/usr/pkg/lib -Wl,--rpath -Wl,/usr/local/lib
As far as running the program, I don't get any particular output that
would be that interesting here other than I can put a printf("Hi, you
have the right library!\n") into a function in libwcalc that I know will
be called and I see that the code never executes. If I edit the wcalc
wrapper script generated by libtool and put ../libwcalc/.libs at the
beginning (instead of the end) of LD_LIBRARY_PATH then I do see that
printf output. Also I can just do
ldd .libs/wcalc and see, among the other shared libs:
-lwcalc.0 => /usr/pkg/lib/libwcalc.so.0
where that is an old version which is installed on the system. The
reason I just don't delete the old version is the new one is still under
development and not ready for deployment.
Thanks
-Dan