undefined symbol: lame_encode_buffer_interleaved_int

· Read in about 2 min · (225 Words)
linux

I use a Debian unstable installation as my daily driver. That does sometimes come with pains when doing apt-get upgrade. Like today. After upgrading and rebooting, suddenly (almost) everything that had to do with sound was broken. Pulseaudio wasn’t working, alsamixer wouldn’t start, Steam worked, but only after I removed the OS’s libsndfile1:i386 and libmp3lame0:i386. The error I got from starting these applications in a shell always revolved around this:

/lib/x86_64-linux-gnu/libsndfile.so.1: undefined symbol: lame_encode_buffer_interleaved_int

libsndfile1 was refering to some function that it expected in libmp3lame0, but could not find it. And, sure enough, looking at the shared library file for lame with nm -gD /lib/x86_64-linux-gnu/libmp3lame.so.0, that symbol was not there. Someone else had the same problem, but their solution did not seem to apply to me - libmp3lame0 and libsndfile1 were installed and apt-get --reinstall install libmp3lame0 libsndfile1 also did nothing.

On a whim, I downloaded the latest versions of those packets (--reinstall apparently does not do that, they were not in /var/cache/apt/archives - how does that work?) and installed them with dpkg -i.

And lo and behold, what do I get? dpkg warns me that it is “downgrading” libmp3lame0 from 3.99.5 to 3.100-4.

So there, problem solved. I did not have the latest version of libmp3lame0, because dpkg/apt for some reason thought my old version was newer than what it found in the repos.