You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Perlbrew编译生成libperl.so而非libperl.a?

问题描述

我正在将部分软件从RHEL 7迁移至Ubuntu 22.04,使用Perlbrew编译安装了带线程支持的Perl 5.36.0:

perlbrew install perl-5.36.0 --as=perl-5.36.0 -Duseithreads

但编译mod_perl时出现链接错误:

/usr/bin/ld: /perl5/perls/perl-5.36.0t/lib/5.36.0/x86_64-linux-thread-multi/CORE/libperl.a(op.o): relocation R_X86_64_PC32 against symbol `PL_hash_state_w' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value

此前在RHEL 7中Perlbrew生成的是libperl.so,而Ubuntu中生成的是静态库libperl.a。请问如何设置Perlbrew安装选项,使其在Ubuntu中编译生成libperl.so?

解决方案

要让Perlbrew在Ubuntu 22.04中编译生成动态库libperl.so,需在安装参数中添加-Duseshrplib选项,该选项会强制Perl编译时生成共享版本的libperl。

修改后的安装命令如下:

perlbrew install perl-5.36.0 --as=perl-5.36.0 -Duseithreads -Duseshrplib

补充说明

  • -Duseshrplib是Perl编译配置的核心选项,专门用于生成动态链接库libperl.so,替代默认的静态库libperl.a。
  • 保留-Duseithreads参数以维持线程支持,满足mod_perl对线程环境的依赖需求。
  • 重新编译Perl完成后,再尝试编译mod_perl,即可解决上述链接错误。

内容的提问来源于stack exchange,提问作者ilgtech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:15:07