GeƤndert: 3. 6. 2010, 12:22
Who broke pulseaudio and phonon?
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.