Dakons blog

Erstellt: 3. 6. 2010, 12:18
GeƤndert: 3. 6. 2010, 12:22

Who broke pulseaudio and phonon?

Tags:

I often face the same problem once I upgraded KDE to the lastest version from openSuSE build service: the KHTML part isn't working properly, I always get the error message /usr/lib/libphonon.so.4: symbol pa_ext_device_manager_reorder_devices_for_role, version PULSE_0 not defined in file libpulse.so.0 with link time reference. This is not only my problem and it doesn't seem related to openSuSE either as a google search on pa_ext_device_manager_reorder_devices_for_role shows.

My workaround was always to revert my libphonon to the version shipped in openSuSE 11.2 as this did not show the problem. But now I can't do this anymore since KDE 4.5 requires a newer phonon for development. Since I have some bugs to fix I decided to look into this.

For reference I take a copy of libphonon.so.4.3.0 which worked for me until now. A short look showed that this symbol is not mentioned anywhere within this library. Now let's look into the current one:

$ nm -D /usr/lib/libphonon.so.4.4.0 | grep pa_ext
U pa_ext_device_manager_read
U pa_ext_device_manager_reorder_devices_for_role
U pa_ext_device_manager_set_subscribe_cb
U pa_ext_device_manager_subscribe

What does this show? In the dynamic symbols of that library there are unresolved references to pa_ext_something. Ok, let's do some shell magic: scan all libraries libphonon.so.4.4.0 links against and look if they have something that would resolve this:

$ for i in $(ldd /usr/lib/libphonon.so.4.4.0 | sed 's/.*=> //;s/ (0x[a-f0-9]*)$//'); do nm -D $i | grep pa_ext && echo $i; done
00011710 T pa_ext_stream_restore_delete
000112b0 T pa_ext_stream_restore_read
00010f60 T pa_ext_stream_restore_set_subscribe_cb
00011070 T pa_ext_stream_restore_subscribe
000114e0 T pa_ext_stream_restore_test
00011a00 T pa_ext_stream_restore_write
/usr/lib/libpulse.so.0

Ok, this shows that other pa_ext_* symbols are coming from libpulse.so.0, but not the ones we need. Since this is the only libpulse package I find in any repositories I have I'm locked here.

So what happens? If I read an older message by Harald Fernengel correctly the package was build using a pulseaudio version with device manager extensions. But that version is not shipped in the same repository (which is a bug IMHO). At runtime I don't have this symbols around as the only versions I have seem to miss that extension. Seems to be a problem not only openSuSE faces.

Anbieterkennzeichnung