Running perl -MExtUtils::Embed -e ldopts results in unusable output:
-Wl,-E  -fstack-protector-strong -L/usr/local/lib  -L/usr/lib/x86_64-linux-gnu/perl/5.34/CORE -lperl -ldl -lm -lpthread -lc -lcrypt
There is, in fact no libperl.so anywhere in the system.  There are, however, /usr/lib/x86_64-linux-gnu/libperl.so.5.34 and /usr/lib/x86_64-linux-gnu/libperl.so.5.34.0 in /usr/lib/x86_64-linux-gnu.  Not only is this directory missing from the output above, but libperl.so as a symlink there to libperl.so.5.34 or libperl.so.5.34.0 is also missing.
Note that Makefiles usually use the output of -e ccopts and -e ldopts to set arguments correctly with respect to the environment rather than hardcoding them.  Now, with the ExtUtils::Embed module broken, reliable and portable builds are impossible.  (Think, e.g. dockerized apps).
How did this get so royally fubar-ed?  How can this be fixed?
EDIT/UPDATE: As suggested in the comments, thelibperl-dev package is installed. (apt-get says so).
UPDATE 2: The easiest fix may be in the libperl-dev package, which can install a libperl.so symlink in the original location of the libraries (/usr/local/lib?) as well. Then Embed.pm wouldn't need to change, as its output would work, thus preserving the dynamic settings in Makefiles too.