On Sunday 06 January 2008, Matthijs Kooijman wrote: > I've been trying to get alsa to work with uclibc and found out that it > breaks against uclibc when using versioned symbols.
i hit this elsewhere, but forgot to push my experience back in Gentoo. sorry about that. > As far as I understand, uclibc doesn't support versioned symbols. However, > the default gentoo-embedded toolchain is happy to compile binaries with > versioned symbols. So, there are no problems at compile or link time. correct. we'll add optional version support to uClibc at some point, but that'll be some time away and most likely turned off by default as ABI compatibility is a back seat in embedded world. > However, at runtime, the dynamic module loader (I think?) ignores the > versions on symbols and just picks some symbol to link against. In my case, > pulseaudio linked against the symbols from the old alsa api (so not even > the default version). This resulted in some hard to debug breakage. uClibc's ldso skips over any dynamic tags related to symbol versioning. i looked at adding warnings/errors like is done with TEXTRELs, but it seems that it is not possible to disable these things completely in the core libs that come from gcc. btw, we should consider adding --disable-symvers in toolchain.eclass for uClibc/gcc ... when looking for symbols, uClibc simply walks until it finds the first match. > The solution to this problem turned out to be compiling alsa-lib with > --without-versioned. This way, only the default version of each symbol is > compiled, and no version information is added. yep > 1. Add an alsa-compat use flag to alsa-libs. Only compile also with > 2. Add a symver (global?) useflag. This usefalg does the same as the > 3. Modify the configure script of alsa-lib (probably upstream). The current (1) is no good. (2) will probably be realistic down the line, but not until uClibc actually supports it. (3) is certainly not the route we want to go. i'll commit like Ned said and tie it to elibc_uclibc to --without-versioned -mike
signature.asc
Description: This is a digitally signed message part.
