如何在 64 位 Cent OS 服务器上安装 32 位版本的 perl?

如何在 64 位 Cent OS 服务器上安装 32 位版本的 perl?

我想在我的 Cent OS 服务器上安装 32 位版本的 perl,当然它是 64 位的。输出perl -v

[root@M-229 ~]# perl --version

This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi

Copyright 1987-2009, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

为此,我尝试使用 yum 和 rpm,它们都只提供 64 位版本,然后我下载了 perl-5.8.8.tar.gz 文件并尝试从中安装。即使这样也不起作用,make 给出以下错误

make: *** No rule to make target `<command-line>', needed by `miniperlmain.o'.  Stop.

我尝试了以下链接中的说明,但没有效果。请帮助我完成此操作。

此链接

另一个链接

以及几乎所有的链接在这里

请帮忙,

编辑 我想实现这一点,因为机器上有一个 32 位开源应用程序正在运行。但是在某些情况下我发现了一个错误。我下载了源代码,理解并修复了错误,现在我无法测试更改,因为它给我的所有其他 .so 都是 32 位的dlopen failed: /usr/local/garner/plugins/libfwstub.so: wrong ELF class: ELFCLASS64

我从几天前开始就一直停留在这个问题上,请帮帮我。

答案1

文章 如何在 64 位 Centos 上使用 perlbrew 32 位 Perl 描述了以下过程:

A.安装perlbrew

您需要从 CPAN 安装 perlbrew,它有很多依赖项。出色的 App::cpanminus 使此体验尽可能轻松,因此我在安装 perlbrew 之前先安装了它。

$ sudo yum install perl-CPAN
$ sudo cpan App::cpanminus
$ sudo cpanm install App::perlbrew

B. 初始化 perlbrew

$ perlbrew init
$ perlbrew install-patchperl

注意 init 步骤的输出 - 它将指导您更改 shell 配置。

C.安装 32 位库

安装这两个包足以构建 32 位 perl 核心。如果您要针对 32 位 perl 构建其他 XS 模块,则可能需要安装其他 32 位库。

$ sudo yum install glibc-devel.i686 libgcc.i686

D. 构建 Perl

$ perlbrew install 5.8.9 -Accflags="-m32 -march=i686" -Aldflags="-m32 -march=i686" -Alddlflags="-shared -m32 -march=i686"
Fetching perl-5.8.9 as /home/zts/perl5/perlbrew/dists/perl-5.8.9.tar.bz2
Installing /home/zts/perl5/perlbrew/build/perl-5.8.9 into ~/perl5/perlbrew/perls/perl-5.8.9

This could take a while. You can run the following command on another shell to track the status:

  tail -f ~/perl5/perlbrew/build.perl-5.8.9.log

perl-5.8.9 is successfully installed.

这就是全部了,尽管结果并不完美。虽然上述调用构建了一个 32 位 perl,但它不会覆盖系统的 archname - 因此生成的 @INC 如下所示:

@INC:
    /home/zts/perl5/perlbrew/perls/perl-5.8.9/lib/5.8.9/x86_64-linux
    /home/zts/perl5/perlbrew/perls/perl-5.8.9/lib/5.8.9
    /home/zts/perl5/perlbrew/perls/perl-5.8.9/lib/site_perl/5.8.9/x86_64-linux
    /home/zts/perl5/perlbrew/perls/perl-5.8.9/lib/site_perl/5.8.9
    .

就我的目的而言,这只是一个美学问题 - x86_64-linux 目录包含 32 位共享对象。

答案2

我还没有尝试过(我确实想知道为什么在 64 位系统上需要 32 位 perl),但也许类似这样的方法可行。根据需要调整路径和配置选项。(使用 ls 和 cd 在您的系统上找到正确的目录,使用 ./configure --help 查看可用的配置选项):

export CC="gcc -m32"
export CXX="g++ -m32"
export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"       
./configure --prefix=/usr --libdir=/usr/lib32 --enable-utf --enable-unicode-properties --enable-pcre16 --enable-pcre32 --enable-jit
make

相关内容