media-libs/gstreamer-0.10.20: 'xmerge gstreamer' fails with link-time error /usr/lib/libgobject-2.0.so: could not read symbols: File in wrong format xmerge is emerge wrapper, as described in Gentoo Embedded handbook. Reproducible: Always Steps to Reproduce: 1. Setup cross-compile enviroment for arm as described in Gentoo Embedded handbook 2. xmerge gstreamer Actual Results: emerge fails to build gstreamer. Error is "/usr/lib/libgobject-2.0.so: could not read symbols: File in wrong format". Expected Results: successful build of gstreamer Here is the last command arm-module-linux-gnueabi-gcc -shared .libs/libgstreamer_0.10_la-gst.o .libs/libgstreamer_0.10_la-gstobject.o <... tons of .lib/*.o libraries ... > .libs/libgstreamer_0.10_la-gstmarshal.o -Wl,--whole-archive parse/.libs/libgstparse.a -Wl,--no-whole-archive -lpthread /usr/lib/libgobject-2.0.so /usr/lib/libgthread-2.0.so /usr/lib/libgmodule-2.0.so /usr/lib/libglib-2.0.so /usr/lib/libxml 2.so -lrt -ldl -Wl,-O1 -pthread -Wl,-soname -Wl,libgstreamer-0.10.so.0 -Wl,-version-script -Wl,.libs/libgstreamer-0.10. ver -o .libs/libgstreamer-0.10.so.0.17.0 /usr/lib/libgobject-2.0.so: could not read symbols: File in wrong format I think, that linker tries to use some HOST system's libraries like libgobject.so
Here is my xmerge --info Portage 2.1.6.11 (default/linux/arm/2008.0, gcc-4.4.0, glibc-2.8_p20080602-r1, 2.6.24-smp i686) ================================================================= System uname: Linux-2.6.24-smp-i686-Intel-R-_Pentium-R-_4_CPU_2.60GHz-with-glibc2.0 Timestamp of tree: Tue, 19 May 2009 01:45:01 +0000 app-shells/bash: 3.2_p39 dev-java/java-config: 2.1.7 dev-lang/python: 2.4.4-r13, 2.5.4-r2 dev-python/pycrypto: 2.0.1-r8 dev-util/cmake: 2.6.2-r1 sys-apps/baselayout: 1.12.11.1 sys-apps/sandbox: 1.6-r2 sys-devel/autoconf: 2.13, 2.63 sys-devel/automake: 1.7.9-r1, 1.9.6-r2, 1.10.2 sys-devel/binutils: 2.18-r3 sys-devel/gcc-config: 1.4.1 sys-devel/libtool: 1.5.26 virtual/os-headers: 2.6.23-r3 ACCEPT_KEYWORDS="arm" CBUILD="i686-pc-linux-gnu" CFLAGS="-Os -pipe" CHOST="arm-module-linux-gnueabi" CONFIG_PROTECT="/etc" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/gconf /etc/terminfo /etc/udev/rules.d" CXXFLAGS="-Os -pipe" DISTDIR="/usr/portage/distfiles" FEATURES="distlocks fixpackages parallel-fetch protect-owned sandbox sfperms strict unmerge-orphans userfetch" GENTOO_MIRRORS="http://mirror.yandex.ru/gentoo-distfiles/" LANG="en_US.UTF-8" LDFLAGS="-Wl,-O1" MAKEOPTS="-j2" PKGDIR="/usr/portage/packages" PORTAGE_CONFIGROOT="/usr/arm-module-linux-gnueabi/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" SYNC="rsync://rsync.gentoo.org/gentoo-portage" USE="arm minimal" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" ELIBC="glibc" INPUT_DEVICES="keyboard" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" USERLAND="GNU" VIDEO_CARDS="fbdev glint mach64 mga nv r128 radeon savage sis tdfx trident vga voodoo" Unset: CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, FFLAGS, INSTALL_MASK, LC_ALL, LINGUAS, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, PORTDIR_OVERLAY
I have no idea what xmerge tries to do...
This package compiles when using crossdev-wrappers vs xmerge. crossdev-wrappers provides lots of per chost config.site values.
Here is my xmerge #!/bin/sh if [ ! -d "$SYSROOT" ] ; then echo "SYSROOT is not set" >&2 exit -1 fi export CBUILD=$(portageq envvar CHOST) export PORTAGE_CONFIGROOT=${SYSROOT} export ROOT=${SYSROOT} exec emerge "$@"
Ok, i found that it is not gstreamer-related bug, but libtool-related. Here is the source http://bugs.gentoo.org/262298. Here are the similar bugs in other libs http://bugs.gentoo.org/show_bug.cgi?id=158040 http://bugs.gentoo.org/show_bug.cgi?id=261423 There are some (more or less ugly) workarounds - Temporary rename /usr/lib/libgobject.so to smth else and repeat xmerege gstreamer - Add global LDFLAGS += -L/usr/arm-unknown-linux-gnueabi/usr/lib - Patch the libtool *** This bug has been marked as a duplicate of bug 262298 ***
Note: media-libs/gstreamer-0.10.31 still suffer from libtool bug. But modern crossdev-wrappers has cross-fix-root script. I launch it and re-emerge gstreamer. It builds successfully.