Ubuntu 22.04下ExtUtils::Embed模块ldopts功能异常导致编译链接问题求助
Ubuntu 22.04下ExtUtils::Embed模块ldopts功能异常导致编译链接问题求助
我在Ubuntu 22.04环境下使用ExtUtils::Embed模块的ldopts功能时碰到了棘手问题,执行命令:
perl -MExtUtils::Embed -e ldopts
得到的输出完全无法用于正常编译链接:
-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
具体问题如下:
- 系统里根本不存在
libperl.so文件,实际存在的是/usr/lib/x86_64-linux-gnu/libperl.so.5.34和/usr/lib/x86_64-linux-gnu/libperl.so.5.34.0 - 上述命令的输出不仅漏掉了
/usr/lib/x86_64-linux-gnu这个库所在的目录,而且该目录下也没有libperl.so到上述版本文件的软链接
更麻烦的是,通常Makefile都会依赖-e ccopts和-e ldopts的输出来根据环境自动配置编译链接参数,而非硬编码。现在ExtUtils::Embed模块出了问题,直接导致无法实现可靠且可移植的构建(比如Docker化应用的构建场景)。
我实在搞不懂为什么会把事情搞成这样?有没有什么可行的修复办法?
更新1:根据评论区提示,我已经确认libperl-dev包处于安装状态(apt-get查询结果显示已安装)。
更新2:我想到一个最直接的修复思路——或许可以在libperl-dev包中,在库文件的对应位置(比如/usr/local/lib?)添加一个libperl.so软链接,指向libperl.so.5.34或者libperl.so.5.34.0。这样Embed.pm不需要做任何修改,它的输出就能正常工作,同时也能保留Makefile里的动态配置逻辑。
备注:内容来源于stack exchange,提问作者arayq2
相关产品推荐
相关产品推荐

