libtool
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]