From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
To: buildroot@busybox.net
Subject: [Buildroot] The issue is link_all_deplibs libtool config variable
Date: Wed, 15 Oct 2008 10:50:44 +0200 [thread overview]
Message-ID: <20081015105044.040b8915@surf> (raw)
In-Reply-To: <20081009114343.2eabb7e6@surf>
Hi
[ Not sure it's worth posting to this list about Buildroot problems
since no-one cares, but anyway... ]
Le Thu, 9 Oct 2008 11:43:43 +0200,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com> a ?crit :
> It seems that the problem is caused by libtool configuration variable
> "link_all_deplibs" being set to "no".
>
> This problem has been reported here:
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=297726. It seems that
> setting link_all_deplibs to yes works for native compilation, but not
> from cross-compilation. The patch seems be to be Debian-specific, and
> I'm an Ubuntu user, so I inherited this patch.
>
> As a quick and gory hack, I modified the configure to replace all
> instances of link_all_deplibs=no by link_all_deplibs=yes. And the
> compilation now works properly.
This workaround works but is not nice, because the binary ends up being
linked with *all* libraries, and not only the ones on which the binary
directly depends. This is sad because the Linux dynamic library loader
is able at runtime to compute the indirect dependencies. And not being
linked with *all* the dependent libraries has the nice effect that you
don't need to relink all your applications when you change a library.
So, back to the problem. The following libtool command line:
/bin/bash ../libtool --tag=CC --mode=link /usr/local/uclibc-0.9.29/arm/usr//bin/arm-linux-gcc -Os -I/home/thomas/local/buildroot/build_arm/staging_dir/include -I/home/thomas/local/buildroot/build_arm/staging_dir/usr/include -I/usr/local/uclibc-0.9.29/arm/usr//arm-linux/include -g -O2 -L/home/thomas/local/buildroot/build_arm/staging_dir/lib -L/home/thomas/local/buildroot/build_arm/staging_dir/usr/lib -o fc-cache fc-cache.o ../src/libfontconfig.la
mkdir .libs
generates the following command line:
/usr/local/uclibc-0.9.29/arm/usr//bin/arm-linux-gcc -Os -I/home/thomas/local/buildroot/build_arm/staging_dir/include -I/home/thomas/local/buildroot/build_arm/staging_dir/usr/include -I/usr/local/uclibc-0.9.29/arm/usr//arm-linux/include -g -O2 -o fc-cache fc-cache.o -L/home/thomas/local/buildroot/build_arm/staging_dir/lib -L/home/thomas/local/buildroot/build_arm/staging_dir/usr/lib ../src/.libs/libfontconfig.so -Wl,--rpath -Wl,/home/thomas/local/buildroot/build_arm/fontconfig-2.6.0/src/.libs
This command line properly includes a -Wl,--rpath option to the place
where the fontconfig library is present (since it hasn't already been
installed), but misses a -Wl,--rpath to the usr/lib directory in the
staging dir. Manually linking with the same command line, to which
"-Wl,--rpath
-Wl,/home/thomas/local/buildroot/build_arm/staging_dir/usr/lib" works
properly. And the resulting binary only depends on libc and
libfontconfig, not on the libraries required by libfontconfig (which
will be loaded automatically by the Linux library loader) :
$ arm-linux-readelf -a fc-cache
[...]
0x00000001 (NEEDED) Shared library: [libfontconfig.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.0]
0x0000000f (RPATH) Library rpath: [/home/thomas/local/buildroot/build_arm/fontconfig-2.6.0/src/.libs:/home/thomas/local/buildroot/build_arm/staging_dir/usr/lib/]
[...]
However, the rpath (in which the dynamic linker will try at runtime to
find the libraries) has been written in the binary. Which is just
plain stupid because this rpath will be completely meaningless on the target
system. No rpath is needed since on the target system, the libraries
are installed in the standard directories (/lib, /usr/lib), and the
dynamic linker knows about these standard paths.
The solution is to use -Wl,--rpath-link instead of -Wl,--rpath.
So, I have a manual workaround, but I don't know how to fix it properly ?
Any clue ?
Thanks a lot,
Thomas
--
Thomas Petazzoni, Free Electrons
Kernel, drivers and embedded Linux development,
consulting, training and support.
http://free-electrons.com
prev parent reply other threads:[~2008-10-15 8:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-07 14:56 [Buildroot] Issue with libtool while building/linking fontconfig Thomas Petazzoni
2008-10-08 6:24 ` Thomas Petazzoni
2008-10-09 9:43 ` [Buildroot] The issue is link_all_deplibs libtool config variable Thomas Petazzoni
2008-10-15 8:50 ` Thomas Petazzoni [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081015105044.040b8915@surf \
--to=thomas.petazzoni@free-electrons.com \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox