compile problem with libsdl-mixer when building whole repo from scratch

Thilo Fromm t-lo at entropiesenke.de
Wed May 7 10:42:08 CEST 2008


Hello OpenMoko developers,

I'm trying to build OpenMoko from scratch via MokoMakefile as described in the wiki. This worked well for me several weeks ago, so I wasn't expecting any issues. So far I ran across two problems - one is  with OpenEmbedded, the other with  my kernel configuration. As I couldn't find references or solutions to these in the wiki or the mailing list, I thought it would be best to mention them here. I'd welcome any hints about whether / how to proceed with the problems.

###################

One problen I had was a compilation error with libsdl-mixer-1.2.6. This might be a problem of OpenEmbedded, though:

--------
NOTE: make -j 5
make[1]: Entering directory `/home/moko/2007.2/build/tmp/work/armv4t-angstrom-linux-gnueabi/libsdl-mixer-1.2.6-r2/SDL_mixer-1.2.6'
Making all in timidity
make[2]: Entering directory `/home/moko/2007.2/build/tmp/work/armv4t-angstrom-linux-gnueabi/libsdl-mixer-1.2.6-r2/SDL_mixer-1.2.6/timidity'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/moko/2007.2/build/tmp/work/armv4t-angstrom-linux-gnueabi/libsdl-mixer-1.2.6-r2/SDL_mixer-1.2.6/timidity'
make[2]: Entering directory `/home/moko/2007.2/build/tmp/work/armv4t-angstrom-linux-gnueabi/libsdl-mixer-1.2.6-r2/SDL_mixer-1.2.6'
/bin/sh ./libtool --tag=CC --mode=link ccache arm-angstrom-linux-gnueabi-gcc -march=armv4t -mtune=arm920t  -isystem/home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/u
sr/include -fexpensive-optimizations -frename-registers -fomit-frame-pointer -Os -I/home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/usr/include/SDL -D_REENTRANT -DUS
E_RWOPS -DCMD_MUSIC -DWAV_MUSIC -DLIBMIKMOD_MUSIC -pthread -D_REENTRANT -DMID_MUSIC -DUSE_TIMIDITY_MIDI -I./timidity -DOGG_MUSIC  -L/home/moko/2007.2/build/tmp/staging/arm-angstro
m-linux-gnueabi/usr/lib -Wl,-rpath-link,/home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/usr/lib -Wl,-O1 -o libSDL_mixer.la -rpath /usr/lib -no-undefined -release 1.
2 -version-info 2:4:2 -export-symbols-regex Mix_.* load_aiff.lo load_voc.lo load_ogg.lo mixer.lo music.lo music_cmd.lo music_ogg.lo wavestream.lo effect_position.lo effect_stereor
everse.lo effects_internal.lo  timidity/libtimidity.la   -lvorbisfile -lvorbis -logg -L/home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/usr/lib -Wl,-rpath,/home/moko
/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/usr/lib -lSDL -lpthread -L/usr/lib -lmikmod -ldl -L/usr/lib -lm
rm -fr  .libs/libSDL_mixer.exp .libs/libSDL_mixer.ver
generating symbol list for `libSDL_mixer.la'
/home/moko/2007.2/build/tmp/cross/bin/arm-angstrom-linux-gnueabi-nm -B  .libs/load_aiff.o .libs/load_voc.o .libs/load_ogg.o .libs/mixer.o .libs/music.o .libs/music_cmd.o .libs/mus
ic_ogg.o .libs/wavestream.o .libs/effect_position.o .libs/effect_stereoreverse.o .libs/effects_internal.o  timidity/.libs/libtimidity.a | sed -n -e 's/^.*[     ]\([ABCDGIRSTW][ABC
DGIRSTW]*\)[    ][      ]*\(\)\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2\3 \3/p' | /bin/sed 's/.* //' | sort | uniq > .libs/libSDL_mixer.exp
/home/moko/2007.2/build/tmp/staging/x86_64-linux/usr/bin/grep -E -e "Mix_.*" ".libs/libSDL_mixer.exp" > ".libs/libSDL_mixer.expT"
mv -f ".libs/libSDL_mixer.expT" ".libs/libSDL_mixer.exp"
echo "{ global:" > .libs/libSDL_mixer.ver
 cat .libs/libSDL_mixer.exp | sed -e "s/\(.*\)/\1;/" >> .libs/libSDL_mixer.ver
 echo "local: *; };" >> .libs/libSDL_mixer.ver
 ccache arm-angstrom-linux-gnueabi-gcc -march=armv4t -mtune=arm920t -shared  .libs/load_aiff.o .libs/load_voc.o .libs/load_ogg.o .libs/mixer.o .libs/music.o .libs/music_cmd.o .lib
s/music_ogg.o .libs/wavestream.o .libs/effect_position.o .libs/effect_stereoreverse.o .libs/effects_internal.o -Wl,--whole-archive timidity/.libs/libtimidity.a -Wl,--no-whole-arch
ive  -Wl,--rpath -Wl,/home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/usr/lib -pthread -L/home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/usr/lib -L/us
r/lib /home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/usr/lib/libvorbisfile.so /home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/usr/lib/libvorbis.so /
home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/usr/lib/libogg.so -lSDL -lpthread /home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/usr/lib/libmikmod.so
 -ldl -lm  -march=armv4t -mtune=arm920t -Wl,-rpath-link -Wl,/home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/usr/lib -Wl,-O1 -Wl,-rpath -Wl,/home/moko/2007.2/build/t
mp/staging/arm-angstrom-linux-gnueabi/usr/lib -Wl,-soname -Wl,libSDL_mixer-1.2.so.0 -Wl,-version-script -Wl,.libs/libSDL_mixer.ver -o .libs/libSDL_mixer-1.2.so.0.2.4
/home/moko/2007.2/build/tmp/cross/lib/gcc/arm-angstrom-linux-gnueabi/4.1.2/../../../../arm-angstrom-linux-gnueabi/bin/ld: skipping incompatible /usr/lib/libc.so when searching for
 -lc
/usr/lib/libc.a: could not read symbols: File format not recognized
collect2: ld returned 1 exit status
make[2]: *** [libSDL_mixer.la] Error 1
make[2]: Leaving directory `/home/moko/2007.2/build/tmp/work/armv4t-angstrom-linux-gnueabi/libsdl-mixer-1.2.6-r2/SDL_mixer-1.2.6'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/moko/2007.2/build/tmp/work/armv4t-angstrom-linux-gnueabi/libsdl-mixer-1.2.6-r2/SDL_mixer-1.2.6'
FATAL: oe_runmake failed
--------

Apparently, (ARM) libc is missing. A closer look at the linker command shows that although "-L/home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/usr/lib/" appears multiple times, a line like "-L/home/moko/2007.2/build/tmp/staging/arm-angstrom-linux-gnueabi/lib/" is missing. Guess where libc.a resides?

Now my quick-and-dirty fix to this is to modify the (configure-generated) Makefile for libsdl-mixer to include the additional linker library search path when I run across this error. Then I re-run "make openmoko-deve-image", and as the configure stage is already done and the makefile has been fixed up manually, the compile stage works now.
This sucks. Unfortunately I don't know where to look in the OpenEmbedded framework to make sure the additional linker library search path is passed to configure in the corresponding stage as things ought to be. I understand that shell scripts are generated for every package somewhere along the process which care about the package's stages.

I'm in need of some pointers here.

###################

The second problem was related to the kernel config of my machine - nonetheless I find it interesting enough to mention. When building glibc-2.6.1-r4 qemu wouldn't run glibc's (ARM native) localedef (glibc-2.6.1-r4/locale-tree/bin/localedef). Thanks to strace it turns out that qemu wants to mmap memory below a certain address but gets EACCESS in return. In my case mmap needed to map to 0x8000, so "echo 128 >/proc/sys/vm/mmap_min_addr" sure fixed me up. I'm mentioning this here for documentation purposes.

###################

Additionally I encountered the "xserver-kdrive configure fails" problem described here: <http://lists.openmoko.org/pipermail/distro-devel/2008-April/000425.html>. The fix described there works for me.

Regards,
Thilo Fromm




More information about the openmoko-devel mailing list