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