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.