All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] ARM build fails on 64-bit host (tries linking with host libs?)
@ 2010-04-21 14:48 Luca Ceresoli
  0 siblings, 0 replies; 4+ messages in thread
From: Luca Ceresoli @ 2010-04-21 14:48 UTC (permalink / raw)
  To: buildroot

Luca Ceresoli wrote:
> Peter Korsgaard wrote:
> >  Luca> But my point in this ml is: why does the compilation of directfb have
> >  Luca> -L/usr/lib in its commandline?
> > 
> > That seems wrong indeed.
> 

I have solved the issue with this change to buildroot:

diff --git a/package/directfb/directfb-lib-search-path.patch b/package/directfb/
new file mode 100644
index 0000000..3f435b4
--- /dev/null
+++ b/package/directfb/directfb-lib-search-path.patch
@@ -0,0 +1,11 @@
+diff -u directfb-1.4.2-orig/ltmain.sh directfb-1.4.2/ltmain.sh
+--- directfb-1.4.2-orig/ltmain.sh      2010-04-21 14:42:01.911084805 +0200
++++ directfb-1.4.2/ltmain.sh   2010-04-21 14:43:39.388084944 +0200
+@@ -2824,7 +2824,6 @@
+             fi
+           else
+             # We cannot seem to hardcode it, guess we'll fake it.
+-            add_dir="-L$libdir"
+             # Try looking first in the location we're being installed to.
+             if test -n "$inst_prefix_dir"; then
+               case $libdir in

The origin of the patch is in
http://www.bitshrine.org/gpp_info/DirectFB-0.9.24-relink.patch.html
but that was outdated and I had to do it manually (not a big
effort indeed).

Not sure that it's a real solution or that it has no side effects,
but it worked for me.

Luca

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Buildroot] ARM build fails on 64-bit host (tries linking with host libs?)
@ 2010-04-21 10:24 Luca Ceresoli
  0 siblings, 0 replies; 4+ messages in thread
From: Luca Ceresoli @ 2010-04-21 10:24 UTC (permalink / raw)
  To: buildroot

Peter Korsgaard wrote:
>  Luca> But my point in this ml is: why does the compilation of directfb have
>  Luca> -L/usr/lib in its commandline?
> 
> That seems wrong indeed.

I've been analyzing the log of a whole buildroot rebuild (i.e. after
a make distclean). Here are a few things I noticed.

First, the string '-L/usr/lib' appears only in directfb.
Other packages don't seem to be affected.

Second, '-L/usr/lib' is not there in the "building" phase, but appears
when "Installing to (staging directory|target)":

 $ egrep '(>>> directfb|libfusion-1)'  full-rebuild-32bit-host.log
 >>> directfb 1.4.2 Extracting
 >>> directfb 1.4.2 Patching package/directfb
 >>> directfb 1.4.2 Configuring
 >>> directfb 1.4.2 Building
 /opt/xtools/arm-cortex_a8-linux-gnueabi/bin/arm-linux-gcc -Os -pipe -Os  --sysroot /home/murray/devel/keyser/package/buildroot/output/staging/ -shared  .libs/arena.o .libs/call.o .libs/conf.o .libs/fusion.o .libs/hash.o .libs/lock.o .libs/object.o .libs/property.o .libs/reactor.o .libs/ref.o .libs/shmalloc.o .libs/vector.o -Wl,--whole-archive shm/.libs/libfusion_shm.a -Wl,--no-whole-archive  -Wl,--rpath -Wl,/home/murray/devel/keyser/package/buildroot/output/build/directfb-1.4.2/lib/direct/.libs -lz ../direct/.libs/libdirect.so -ldl -lpthread  -Wl,-soname -Wl,libfusion-1.4.so.0 -o .libs/libfusion-1.4.so.0.2.0
 (cd .libs && rm -f libfusion-1.4.so.0 && ln -s libfusion-1.4.so.0.2.0 libfusion-1.4.so.0)
 (cd .libs && rm -f libfusion.so && ln -s libfusion-1.4.so.0.2.0 libfusion.so)
 >>> directfb 1.4.2 'Installing to staging directory'
 /opt/xtools/arm-cortex_a8-linux-gnueabi/bin/arm-linux-gcc -Os -pipe -Os  --sysroot /home/murray/devel/keyser/package/buildroot/output/staging/ -shared  .libs/arena.o .libs/call.o .libs/conf.o .libs/fusion.o .libs/hash.o .libs/lock.o .libs/object.o .libs/property.o .libs/reactor.o .libs/ref.o .libs/shmalloc.o .libs/vector.o -Wl,--whole-archive shm/.libs/libfusion_shm.a -Wl,--no-whole-archive  -lz -L/home/murray/devel/keyser/package/buildroot/output/staging/usr/lib -L/usr/lib -ldirect -ldl -lpthread  -Wl,-soname -Wl,libfusion-1.4.so.0 -o .libs/libfusion-1.4.so.0.2.0
 /usr/bin/install -c .libs/libfusion-1.4.so.0.2.0T /home/murray/devel/keyser/package/buildroot/output/staging/usr/lib/libfusion-1.4.so.0.2.0
 (cd /home/murray/devel/keyser/package/buildroot/output/staging/usr/lib && { ln -s -f libfusion-1.4.so.0.2.0 libfusion-1.4.so.0 || { rm -f libfusion-1.4.so.0 && ln -s libfusion-1.4.so.0.2.0 libfusion-1.4.so.0; }; })
 (cd /home/murray/devel/keyser/package/buildroot/output/staging/usr/lib && { ln -s -f libfusion-1.4.so.0.2.0 libfusion.so || { rm -f libfusion.so && ln -s libfusion-1.4.so.0.2.0 libfusion.so; }; })
 >>> directfb 1.4.2 Installing to target
 /opt/xtools/arm-cortex_a8-linux-gnueabi/bin/arm-linux-gcc -Os -pipe -Os  --sysroot /home/murray/devel/keyser/package/buildroot/output/staging/ -shared  .libs/arena.o .libs/call.o .libs/conf.o .libs/fusion.o .libs/hash.o .libs/lock.o .libs/object.o .libs/property.o .libs/reactor.o .libs/ref.o .libs/shmalloc.o .libs/vector.o -Wl,--whole-archive shm/.libs/libfusion_shm.a -Wl,--no-whole-archive  -lz -L/home/murray/devel/keyser/package/buildroot/output/target/usr/lib -L/usr/lib -ldirect -ldl -lpthread  -Wl,-soname -Wl,libfusion-1.4.so.0 -o .libs/libfusion-1.4.so.0.2.0
 /usr/bin/install -c .libs/libfusion-1.4.so.0.2.0T /home/murray/devel/keyser/package/buildroot/output/target/usr/lib/libfusion-1.4.so.0.2.0
 /opt/xtools/arm-cortex_a8-linux-gnueabi/bin/arm-linux-strip --strip-unneeded /home/murray/devel/keyser/package/buildroot/output/target/usr/lib/libfusion-1.4.so.0.2.0
 (cd /home/murray/devel/keyser/package/buildroot/output/target/usr/lib && { ln -s -f libfusion-1.4.so.0.2.0 libfusion-1.4.so.0 || { rm -f libfusion-1.4.so.0 && ln -s libfusion-1.4.so.0.2.0 libfusion-1.4.so.0; }; })
 (cd /home/murray/devel/keyser/package/buildroot/output/target/usr/lib && { ln -s -f libfusion-1.4.so.0.2.0 libfusion.so || { rm -f libfusion.so && ln -s libfusion-1.4.so.0.2.0 libfusion.so; }; })


Last, the first appearance of -L/usr/lib is preceded of a few lines by
"libtool: install: warning: relinking `libfusion.la'",
as you can see in the following excerpt.
Lines starting with '###' are my notes.

make[6]: Leaving directory `/home/murray/devel/keyser/package/buildroot/output/build/directfb-1.4.2/lib/fusion/shm'
make[5]: Leaving directory `/home/murray/devel/keyser/package/buildroot/output/build/directfb-1.4.2/lib/fusion/shm'
make[5]: Entering directory `/home/murray/devel/keyser/package/buildroot/output/build/directfb-1.4.2/lib/fusion'
make[6]: Entering directory `/home/murray/devel/keyser/package/buildroot/output/build/directfb-1.4.2/lib/fusion'
### skip...
 /usr/bin/install -c -m 644 'protocol.h' '/home/murray/devel/keyser/package/buildroot/output/staging/usr/include/directfb/fusion/protocol.h'
 /usr/bin/install -c -m 644 'reactor.h' '/home/murray/devel/keyser/package/buildroot/output/staging/usr/include/directfb/fusion/reactor.h'
 /usr/bin/install -c -m 644 'ref.h' '/home/murray/devel/keyser/package/buildroot/output/staging/usr/include/directfb/fusion/ref.h'
### note the following line
libtool: install: warning: relinking `libfusion.la'
 /usr/bin/install -c -m 644 'shmalloc.h' '/home/murray/devel/keyser/package/buildroot/output/staging/usr/include/directfb/fusion/shmalloc.h'
(cd /home/murray/devel/keyser/package/buildroot/output/build/directfb-1.4.2/lib/fusion; /bin/bash ../../libtool  --tag=CC --mode=relink /opt/xtools/arm-cortex_a8-linux-gnueabi/bin/arm-linux-gcc -Os -pipe -Os --sysroot /home/murray/devel/keyser/package/buildroot/output/staging/ -O3 -ffast-math -pipe -Os -pipe -Os --sysroot /home/murray/devel/keyser/package/buildroot/output/staging/ -D_GNU_SOURCE -Werror-implicit-function-declaration -version-info 2:0:2 -release 1.4 --sysroot /home/murray/devel/keyser/package/buildroot/output/staging/ -lz --sysroot /home/murray/devel/keyser/package/buildroot/output/staging/ -o libfusion.la -rpath /usr/lib arena.lo call.lo conf.lo fusion.lo hash.lo lock.lo object.lo property.lo reactor.lo ref.lo shmalloc.lo vector.lo shm/libfusion_shm.la ../direct/libdirect.la -ldl -lpthread -inst-prefix-dir /home/murray/devel/keyser/package/buildroot/output/staging)  
 /usr/bin/install -c -m 644 'types.h' '/home/murray/devel/keyser/package/buildroot/output/staging/usr/include/directfb/fusion/types.h'
 /usr/bin/install -c -m 644 'vector.h' '/home/murray/devel/keyser/package/buildroot/output/staging/usr/include/directfb/fusion/vector.h'
### Here comes -L/usr/lib
/opt/xtools/arm-cortex_a8-linux-gnueabi/bin/arm-linux-gcc -Os -pipe -Os  --sysroot /home/murray/devel/keyser/package/buildroot/output/staging/ -shared  .libs/arena.o .libs/call.o .libs/conf.o .libs/fusion.o .libs/hash.o .libs/lock.o .libs/object.o .libs/property.o .libs/reactor.o .libs/ref.o .libs/shmalloc.o .libs/vector.o -Wl,--whole-archive shm/.libs/libfusion_shm.a -Wl,--no-whole-archive  -lz -L/home/murray/devel/keyser/package/buildroot/output/staging/usr/lib -L/usr/lib -ldirect -ldl -lpthread  -Wl,-soname -Wl,libfusion-1.4.so.0 -o .libs/libfusion-1.4.so.0.2.0
/usr/bin/install -c .libs/libfusion-1.4.so.0.2.0T /home/murray/devel/keyser/package/buildroot/output/staging/usr/lib/libfusion-1.4.so.0.2.0
(cd /home/murray/devel/keyser/package/buildroot/output/staging/usr/lib && { ln -s -f libfusion-1.4.so.0.2.0 libfusion-1.4.so.0 || { rm -f libfusion-1.4.so.0 && ln -s libfusion-1.4.so.0.2.0 libfusion-1.4.so.0; }; })
(cd /home/murray/devel/keyser/package/buildroot/output/staging/usr/lib && { ln -s -f libfusion-1.4.so.0.2.0 libfusion.so || { rm -f libfusion.so && ln -s libfusion-1.4.so.0.2.0 libfusion.so; }; })
/usr/bin/install -c .libs/libfusion.lai /home/murray/devel/keyser/package/buildroot/output/staging/usr/lib/libfusion.la
/usr/bin/install -c .libs/libfusion.a /home/murray/devel/keyser/package/buildroot/output/staging/usr/lib/libfusion.a
chmod 644 /home/murray/devel/keyser/package/buildroot/output/staging/usr/lib/libfusion.a
/opt/xtools/arm-cortex_a8-linux-gnueabi/bin/arm-linux-ranlib /home/murray/devel/keyser/package/buildroot/output/staging/usr/lib/libfusion.a
### how about this opther line?
libtool: install: warning: remember to run `libtool --finish /usr/lib'
make[6]: Leaving directory `/home/murray/devel/keyser/package/buildroot/output/build/directfb-1.4.2/lib/fusion'
make[5]: Leaving directory `/home/murray/devel/keyser/package/buildroot/output/build/directfb-1.4.2/lib/fusion'
make[4]: Leaving directory `/home/murray/devel/keyser/package/buildroot/output/build/directfb-1.4.2/lib/fusion'


Why does libfusion.la need to be rebuilt?


Luca

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Buildroot] ARM build fails on 64-bit host (tries linking with host libs?)
  2010-04-20  8:56 Luca Ceresoli
@ 2010-04-20  9:53 ` Peter Korsgaard
  0 siblings, 0 replies; 4+ messages in thread
From: Peter Korsgaard @ 2010-04-20  9:53 UTC (permalink / raw)
  To: buildroot

>>>>> "Luca" == Luca Ceresoli <list@lucaceresoli.net> writes:

Hi,

 Luca> But my point in this ml is: why does the compilation of directfb have
 Luca> -L/usr/lib in its commandline?

That seems wrong indeed.

 Luca> Any clues?
 Luca> Anybody else working on 64-bit machines?

Yes, I'm building directfb and Qt here on 64bit (Debian) without any
problems, but with an internal toolchain, rather than CT-NG.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Buildroot] ARM build fails on 64-bit host (tries linking with host libs?)
@ 2010-04-20  8:56 Luca Ceresoli
  2010-04-20  9:53 ` Peter Korsgaard
  0 siblings, 1 reply; 4+ messages in thread
From: Luca Ceresoli @ 2010-04-20  8:56 UTC (permalink / raw)
  To: buildroot

Hello,

I have a buildroot setup for ARM that works fine on x86-32bit Ubuntu
hosts, but hits an error on x86-64bit while linking directfb.

My buildroot is based on commit d5b0bb4b (2 weeks ago), plus the
addition of a custom board config.
I'm using an external toolchain, created by crosstool-NG (recompiled
on each host).

The first notable difference between the 32- and the 64-bit runs is as
follows (I just wrapped lines for readability).

32-bit:
/opt/xtools/arm-cortex_a8-linux-gnueabi/bin/arm-linux-gcc -Os -pipe -Os
 --sysroot /home/murray/devel/keyser/package/buildroot/output/staging/
 -shared  .libs/arena.o .libs/call.o .libs/conf.o .libs/fusion.o
 .libs/hash.o .libs/lock.o .libs/object.o .libs/property.o
 .libs/reactor.o .libs/ref.o .libs/shmalloc.o .libs/vector.o
 -Wl,--whole-archive shm/.libs/libfusion_shm.a -Wl,--no-whole-archive  -lz
 -L/home/murray/devel/keyser/package/buildroot/output/target/usr/lib
 -L/usr/lib -ldirect -ldl -lpthread  -Wl,-soname -Wl,libfusion-1.4.so.0
 -o .libs/libfusion-1.4.so.0.2.0
/opt/xtools/arm-cortex_a8-linux-gnueabi/lib/gcc/arm-cortex_a8-linux-gnueabi
 /4.4.0/../../../../arm-cortex_a8-linux-gnueabi/bin/ld:
 skipping incompatible /usr/lib/libdl.so when searching for -ldl
/opt/xtools/arm-cortex_a8-linux-gnueabi/lib/gcc/arm-cortex_a8-linux-gnueabi
 /4.4.0/../../../../arm-cortex_a8-linux-gnueabi/bin/ld:
 skipping incompatible /usr/lib/libdl.a when searching for -ldl
/opt/xtools/arm-cortex_a8-linux-gnueabi/lib/gcc/arm-cortex_a8-linux-gnueabi
 /4.4.0/../../../../arm-cortex_a8-linux-gnueabi/bin/ld:
 skipping incompatible /usr/lib/libpthread.so when searching for -lpthread
/opt/xtools/arm-cortex_a8-linux-gnueabi/lib/gcc/arm-cortex_a8-linux-gnueabi
 /4.4.0/../../../../arm-cortex_a8-linux-gnueabi/bin/ld:
 skipping incompatible /usr/lib/libpthread.a when searching for -lpthread
/opt/xtools/arm-cortex_a8-linux-gnueabi/lib/gcc/arm-cortex_a8-linux-gnueabi
 /4.4.0/../../../../arm-cortex_a8-linux-gnueabi/bin/ld:
 skipping incompatible /usr/lib/libc.so when searching for -lc
/opt/xtools/arm-cortex_a8-linux-gnueabi/lib/gcc/arm-cortex_a8-linux-gnueabi
 /4.4.0/../../../../arm-cortex_a8-linux-gnueabi/bin/ld:
 skipping incompatible /usr/lib/libc.a when searching for -lc
/usr/bin/install -c .libs/libfusion-1.4.so.0.2.0T
 /home/murray/devel/keyser/package/buildroot/output/target/usr/lib
 /libfusion-1.4.so.0.2.0

64-bit:
/opt/xtools/arm-cortex_a8-linux-gnueabi/bin/arm-linux-gcc -Os -pipe -Os
 --sysroot /home/murray/devel/keyser/package/buildroot/output/staging/
 -shared  .libs/arena.o .libs/call.o .libs/conf.o .libs/fusion.o
 .libs/hash.o .libs/lock.o .libs/object.o .libs/property.o
 .libs/reactor.o .libs/ref.o .libs/shmalloc.o .libs/vector.o
 -Wl,--whole-archive shm/.libs/libfusion_shm.a -Wl,--no-whole-archive  -lz
 -L/home/murray/devel/keyser/package/buildroot/output/target/usr/lib
 -L/usr/lib -ldirect -ldl -lpthread  -Wl,-soname -Wl,libfusion-1.4.so.0
 -o .libs/libfusion-1.4.so.0.2.0
/usr/lib/libdl.so: file not recognized: File format not recognized
collect2: ld returned 1 exit status

I'll save you from staring at the lines above: the first line of the two
cases is absolutely identical. The result is different, though.

Looks like on the 32-bit host arm-linux-gcc finds some of the host libs
(/usr/lib/libdl.so and others) but decides they're incompatible:
reasonable, since they're x86, not ARM code.

OTOH, on the 64-bit host the lib cannot be opened. Perhaps my
ct-NG-generated toolchain cannot handle 64-bit files, not even to recognize
they are incompatible.

But my point in this ml is: why does the compilation of directfb have
-L/usr/lib in its commandline?

With spirit of adventure, and not with a real knowledge of buildroot's
internale, I tried to fix the issue adding
--libdir='$(STAGING_DIR)' to DIRECTFB_CONF_OPT in
package/directfb/directfb.mk. The error disappeared, but later on the
compilation of qmake broke (both on 32- and on 64-bit hosts!)
complaining that
> The DirectFB screen driver functionality test failed!

Any clues?
Anybody else working on 64-bit machines?

Thanks in advance,
Luca

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-04-21 14:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-04-21 14:48 [Buildroot] ARM build fails on 64-bit host (tries linking with host libs?) Luca Ceresoli
  -- strict thread matches above, loose matches on Subject: below --
2010-04-21 10:24 Luca Ceresoli
2010-04-20  8:56 Luca Ceresoli
2010-04-20  9:53 ` Peter Korsgaard

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.