The attached buildroot defconfig allows to reproduce an error on lookup of symbols provided by a shared library when using uclibc-ng. The library used for reproducing in the provided configuration is libebml, but I also saw it with libmmal from the raspberry pi people.
The config builds vlc with matroska plugin which links to libmatroska, which then links to libebml. In the generated rootfilesystem just run vlc listing it's plugins:
# vlc --list vlc: symbol '_ZTIN7libebml10EbmlMasterE': can't resolve symbol [...snip...]
This happens when the libmatroska plugin is loaded. Looking at the plugin with ldd:
# ldd /usr/lib/vlc/plugins/demux/libmkv_plugin.so [...snip...] libmatroska.so.6 => /usr/lib/libmatroska.so.6 (0x00000000) libebml.so.4 => /usr/lib/libebml.so.4 (0x00000000) [...snap...]
Looking in libebml.so.4 for the symbol using the buildroot toolchains readelf:
[...]/target # ../host/usr/bin/x86_64-linux-readelf -Ws usr/lib/libebml.so.4 | grep _ZTIN7libebml10EbmlMasterE 520: 000000000021da20 24 OBJECT WEAK DEFAULT 19 _ZTIN7libebml10EbmlMasterE
I used buildroot git from today to reproduce this, but was also able to reproduce with buildroot 2015.11. It happens on arm as well as x86_64 (and probably others). The attached default configuration is for x86_64, after building just untar the rootfs and chroot into it, then run vlc as described above. Using glibc instead of uclibc-ng makes the problem disappear.
-Julian
Hi Julian, Julian Scheel wrote,
The attached buildroot defconfig allows to reproduce an error on lookup of symbols provided by a shared library when using uclibc-ng. The library used for reproducing in the provided configuration is libebml, but I also saw it with libmmal from the raspberry pi people.
The config builds vlc with matroska plugin which links to libmatroska, which then links to libebml. In the generated rootfilesystem just run vlc listing it's plugins:
# vlc --list vlc: symbol '_ZTIN7libebml10EbmlMasterE': can't resolve symbol [...snip...]
I can reproduce it with Buildroot. It just works with OpenADK. I still did not found the difference, which breaks it. I tried a similar uClibc-ng config, no success. I tried the same binutils/gcc version, no success.
Any ideas?
gruss Waldemar