libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Libtool sysroot RPATH problems


From: Richard Purdie
Subject: Re: Libtool sysroot RPATH problems
Date: Thu, 13 Jan 2011 13:11:46 +0000

Hi Ralf,

Thanks for the reply.

On Thu, 2011-01-13 at 08:24 +0100, Ralf Wildenhues wrote:
> * Richard Purdie wrote on Wed, Jan 12, 2011 at 12:06:13AM CET:
> > Firstly, for the first time ever for us, it appears libtool is no longer
> > relinking our libraries at install time.
> 
> That's weird, I don't think the sysroot feature should've caused this
> change.  Not quite sure though.
> 
> > This is welcome as we're cross
> > compiling to a sysroot and we'd never want to actually run them in situ
> > so this could probably save us some build time. It does however mean we
> > never go for a relink step so we're hitting codepaths and issues that
> > I've never seen. For reference, we always used to set installed="no" in
> > our "staged" libraries prior to sysroot support since this let us hack
> > around the lack of sysroot support easier.
> > 
> > Anyhow, the problem I'm seeing is that the final library has an RPATH
> > including the sysroot prefix when make is calling libtool with
> > -rpath /usr/lib at link time. I looked at the code in ltmain.m4sh
> > starting at line 7240 (see the end of the email for a quotation) and
> > firstly, I don't understand why the func_replace_sysroot call is inside
> > the $hardcode_libdir_separator test? Surely it should be outside it and
> > happen whenever $hardcode_libdir_flag_spec is set?

Firstly let me be upfront and clear, I do have some patches applied on
top of libtool 2.4 to address some problems. These are:

http://git.pokylinux.org/cgit.cgi/poky-contrib/tree/meta/recipes-devtools/libtool/libtool/rename-with-sysroot.patch?h=sgarman/libtool-sysroot
(to stop conflicts with gcc/binutils configure options)
http://git.pokylinux.org/cgit.cgi/poky-contrib/tree/meta/recipes-devtools/libtool/libtool/prefix.patch?h=sgarman/libtool-sysroot
(renamed "libtool" to <TARGET_PREFIX>-libtool, which is mainly useful to
detect when our libtool patches aren't being noticed)
http://git.pokylinux.org/cgit.cgi/poky-contrib/tree/meta/recipes-devtools/libtool/libtool/trailingslash.patch?h=sgarman/libtool-sysroot
(a path comparison problem I never did get to the bottom of to report
properly but the fix appears harmless)
http://git.pokylinux.org/cgit.cgi/poky-contrib/tree/meta/recipes-devtools/libtool/libtool/use-sysroot-in-libpath.patch?h=sgarman/libtool-sysroot
(a sysroot fix I believe is in libtool git now)

I don't believe any of these are contributing to the issues I'm seeing
though.

http://git.pokylinux.org/cgit.cgi/poky-contrib/tree/meta/recipes-devtools/libtool/libtool/fix-final-rpath.patch?h=sgarman/libtool-sysroot
is a WIP patch which addresses some of the problems I refer to in this
email thread. Its not applied for the tests below.

> Please show the --mode={link,install} commands plus all of their output,
> also './libtool --config'.  Please also show how exactly you invoke
> configure.  Thanks.

A link command and output showing the problem:

/bin/sh ./i586-poky-linux-libtool --tag=CC   --mode=link i586-poky-linux-gcc 
-march=i586 
--sysroot=/media/build2/builds/rptest/b2/tmp/sysroots/i586-poky-linux  
-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2 -ggdb 
-feliminate-unused-debug-types -no-undefined -export-dynamic -version-number 
0:44:0 -Wl,--version-script=libpng.vers  -Wl,-O1 -Wl,--hash-style=gnu 
-Wl,--as-needed -o libpng12.la -rpath /usr/lib libpng12_la-png.lo 
libpng12_la-pngset.lo libpng12_la-pngget.lo libpng12_la-pngrutil.lo 
libpng12_la-pngtrans.lo libpng12_la-pngwutil.lo libpng12_la-pngread.lo 
libpng12_la-pngrio.lo libpng12_la-pngwio.lo libpng12_la-pngwrite.lo 
libpng12_la-pngrtran.lo libpng12_la-pngwtran.lo libpng12_la-pngmem.lo 
libpng12_la-pngerror.lo libpng12_la-pngpread.lo  -lz -lm 
i586-poky-linux-libtool: link: i586-poky-linux-gcc -march=i586 
--sysroot=/media/build2/builds/rptest/b2/tmp/sysroots/i586-poky-linux -shared  
-fPIC -DPIC  .libs/libpng12_la-png.o .libs/libpng12_la-pngset.o 
.libs/libpng12_la-pngget.o .libs/libpng12_la-pngrutil.o 
.libs/libpng12_la-pngtrans.o .libs/libpng12_la-pngwutil.o 
.libs/libpng12_la-pngread.o .libs/libpng12_la-pngrio.o 
.libs/libpng12_la-pngwio.o .libs/libpng12_la-pngwrite.o 
.libs/libpng12_la-pngrtran.o .libs/libpng12_la-pngwtran.o 
.libs/libpng12_la-pngmem.o .libs/libpng12_la-pngerror.o 
.libs/libpng12_la-pngpread.o   -Wl,-rpath 
-Wl,/media/build2/builds/rptest/b2/tmp/sysroots/i586-poky-linux/usr/lib 
/media/build2/builds/rptest/b2/tmp/sysroots/i586-poky-linux/usr/lib/libz.so -lm 
 -march=i586 
--sysroot=/media/build2/builds/rptest/b2/tmp/sysroots/i586-poky-linux -O2 
-Wl,--version-script=libpng.vers -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed   
-Wl,-soname -Wl,libpng12.so.0 -o .libs/libpng12.so.0.44.0
i586-poky-linux-libtool: link: (cd ".libs" && rm -f "libpng12.so.0" && ln -s 
"libpng12.so.0.44.0" "libpng12.so.0")
i586-poky-linux-libtool: link: (cd ".libs" && rm -f "libpng12.so" && ln -s 
"libpng12.so.0.44.0" "libpng12.so")
mv -f .deps/libpng_la-pngwtran.Tpo .deps/libpng_la-pngwtran.Plo
i586-poky-linux-libtool: link: i586-poky-linux-ar cru .libs/libpng12.a  
libpng12_la-png.o libpng12_la-pngset.o libpng12_la-pngget.o 
libpng12_la-pngrutil.o libpng12_la-pngtrans.o libpng12_la-pngwutil.o 
libpng12_la-pngread.o libpng12_la-pngrio.o libpng12_la-pngwio.o 
libpng12_la-pngwrite.o libpng12_la-pngrtran.o libpng12_la-pngwtran.o 
libpng12_la-pngmem.o libpng12_la-pngerror.o libpng12_la-pngpread.o
i586-poky-linux-libtool: link: i586-poky-linux-ranlib .libs/libpng12.a
i586-poky-linux-libtool: link: ( cd ".libs" && rm -f "libpng12.la" && ln -s 
"../libpng12.la" "libpng12.la" )
i586-poky-linux-libtool: compile:  i586-poky-linux-gcc -march=i586 
--sysroot=/media/build2/builds/rptest/b2/tmp/sysroots/i586-poky-linux 
-DHAVE_CONFIG_H -I. -DPNG_CONFIGURE_LIBPNG -fexpensive-optimizations 
-fomit-frame-pointer -frename-registers -O2 -ggdb 
-feliminate-unused-debug-types -MT libpng_la-pngpread.lo -MD -MP -MF 
.deps/libpng_la-pngpread.Tpo -c pngpread.c -o libpng_la-pngpread.o >/dev/null 
2>&1
i586-poky-linux-libtool: compile:  i586-poky-linux-gcc -march=i586 
--sysroot=/media/build2/builds/rptest/b2/tmp/sysroots/i586-poky-linux 
-DHAVE_CONFIG_H -I. -DPNG_CONFIGURE_LIBPNG -fexpensive-optimizations 
-fomit-frame-pointer -frename-registers -O2 -ggdb 
-feliminate-unused-debug-types -MT libpng_la-pngrtran.lo -MD -MP -MF 
.deps/libpng_la-pngrtran.Tpo -c pngrtran.c -o libpng_la-pngrtran.o >/dev/null 
2>&1
mv -f .deps/libpng_la-pngpread.Tpo .deps/libpng_la-pngpread.Plo
mv -f .deps/libpng_la-pngrtran.Tpo .deps/libpng_la-pngrtran.Plo

And the corresponding install step:

/bin/sh ./i586-poky-linux-libtool   --mode=install /usr/bin/install -c   
libpng12.la libpng.la 
'/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib'
i586-poky-linux-libtool: install: /usr/bin/install -c .libs/libpng12.so.0.44.0 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib/libpng12.so.0.44.0
i586-poky-linux-libtool: install: (cd 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib
 && { ln -s -f libpng12.so.0.44.0 libpng12.so.0 || { rm -f libpng12.so.0 && ln 
-s libpng12.so.0.44.0 libpng12.so.0; }; })
i586-poky-linux-libtool: install: (cd 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib
 && { ln -s -f libpng12.so.0.44.0 libpng12.so || { rm -f libpng12.so && ln -s 
libpng12.so.0.44.0 libpng12.so; }; })
i586-poky-linux-libtool: install: /usr/bin/install -c .libs/libpng12.lai 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib/libpng12.la
i586-poky-linux-libtool: install: /usr/bin/install -c .libs/libpng.so.3.44.0 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib/libpng.so.3.44.0
i586-poky-linux-libtool: install: (cd 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib
 && { ln -s -f libpng.so.3.44.0 libpng.so.3 || { rm -f libpng.so.3 && ln -s 
libpng.so.3.44.0 libpng.so.3; }; })
i586-poky-linux-libtool: install: (cd 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib
 && { ln -s -f libpng.so.3.44.0 libpng.so || { rm -f libpng.so && ln -s 
libpng.so.3.44.0 libpng.so; }; })
i586-poky-linux-libtool: install: /usr/bin/install -c .libs/libpng.lai 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib/libpng.la
i586-poky-linux-libtool: install: /usr/bin/install -c .libs/libpng12.a 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib/libpng12.a
i586-poky-linux-libtool: install: chmod 644 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib/libpng12.a
i586-poky-linux-libtool: install: i586-poky-linux-ranlib 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib/libpng12.a
i586-poky-linux-libtool: install: /usr/bin/install -c .libs/libpng.a 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib/libpng.a
i586-poky-linux-libtool: install: chmod 644 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib/libpng.a
i586-poky-linux-libtool: install: i586-poky-linux-ranlib 
/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/image/usr/lib/libpng.a
i586-poky-linux-libtool: install: warning: remember to run 
`i586-poky-linux-libtool --finish /usr/lib'

and the configure call

/media/build2/builds/rptest/b2/tmp/work/i586-poky-linux/libpng-1.2.44-r0/libpng-1.2.44/configure
  --build=x86_64-linux --host=i586-poky-linux --target=i586-poky-linux 
--prefix=/usr --exec_prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin 
--libexecdir=/usr/libexec --datadir=/usr/share --sysconfdir=/etc 
--sharedstatedir=/com --localstatedir=/var --libdir=/usr/lib 
--includedir=/usr/include --oldincludedir=/usr/include 
--infodir=/usr/share/info --mandir=/usr/share/man 
--with-libtool-sysroot=/media/build2/builds/rptest/b2/tmp/sysroots/i586-poky-linux

The libtool --config output is attached.

> > Changing that helps a bit and I end up with an RPATH of "=/usr/lib" so
> > the sysroot prefix is gone but the "=" is there. I suspect that isn't
> > valid so I added the following code after the func_replace_sysroot call
> > 
> > func_stripname '=' '' "$libdir"
> > libdir=$func_stripname_result
> > 
> > and then I get an RPATH of "/usr/lib" which is ok to a point.
> 
> The replacing of '=' can be achieved by running 'libtool --mode=finish
> LIB' later, although I see we don't document this everywhere yet.

I looked at this and see it changes the .la file but would/should it
relink the binary to encode a different RPATH value? I'm not sure
libtool would have the context to make that change at "finish" time?

> > Of course this is listed in $sys_lib_dlsearch_path_spec so shouldn't be
> > getting added at all. Its coming to this function via $compile_rpath
> > which is being set around line 5939 which in turn is coming from absdir.
> > absdir is being compared against $sys_lib_dlsearch_path_spec but without
> > adding/removing any sysroot prefixes.
> 
> Hmm, that sounds like a bug indeed.
> 
> > I'd really therefore like to ask what behaviour to be expecting from
> > libtool before I try and write patches to fix any of this. To summarise
> > some of my questions:
> 
> I can answer them only with more information, sorry.

See above, let me know if you need anything further.

Cheers,

Richard

Attachment: libtool.config
Description: Text document


reply via email to

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