実現したいこと
ここに実現したいことを箇条書きで書いてください。
・Perl5.16.3をビルド/イントールして、perlを使えるようにしたい。
前提
RHEL9.2環境に既存環境と同じバージョンのPerlをインストールしようとしています。
同等バージョンのファイルを使い、
以下手順で圧縮ファイルの取得からインストールを実施したのですが、
"# make install"を実施するとエラーが表示されてインストールが失敗します。
su -
wget http://www.perl.com/CPAN/src/perl-5.16.3.tar.gz
unzip perl-5.16.3.tar.gz
cd perl-5.16.3
./Configure -Dprefix=/usr -Dscriptdir=/usr/bin -des -Dusedtrace=/usr/bin/dtrace -DDEBUGGING=-g -Dusethreads
make
make install
当時の構築者も既におらず、構築時のログも無く、
私自身もコンパイルについては知見がなく、
make時のログから以下ログの内容に問題がありそうなことまでは特定できたのですがどのように対応すればいいのか分からず質問させて頂きました。
pp.c:3430:54: error: 'struct crypt_data' has no member named 'current_saltbits'
発生している問題・エラーメッセージ
make installでの出力及びエラー内容全量を記載します。 > [root@stag1 perl-5.16.3]# make install > make install.perl install.man STRIPFLAGS= DESTDIR="" > make[1]: Entering directory '/home/t2462/20240422_tmp_perl_test/perl-5.16.3' > `sh cflags "optimize='-O2 -g'" pp.o` pp.c > CCCMD = cc -DPERL_CORE -c -D_REENTRANT -D_GNU_SOURCE -fpcc-struct-return -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -Wall > pp.c: In function 'Perl_pp_crypt': > pp.c:3430:54: error: 'struct crypt_data' has no member named 'current_saltbits' > 3430 | PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; > | ^~ > make[1]: *** [makefile:253: pp.o] Error 1 > make[1]: Leaving directory '/home/t2462/20240422_tmp_perl_test/perl-5.16.3' > make: *** [makefile:535: install] Error 2 > [root@stag1 perl-5.16.3]#
該当のソースコード
1万行に及ぶmakefile内容を記載すればいいのか、それともConfigureあるいはmake実施時のログを添付すればいいのか判断もつかず、 差し当たりエラーの出ている「pp.c」の3430行目前後の内容を記載させて頂きます。 3399 3400 PP(pp_crypt) 3401 { 3402 #ifdef HAS_CRYPT 3403 dVAR; dSP; dTARGET; 3404 dPOPTOPssrl; 3405 STRLEN len; 3406 const char *tmps = SvPV_const(left, len); 3407 3408 if (DO_UTF8(left)) { 3409 /* If Unicode, try to downgrade. 3410 * If not possible, croak. 3411 * Yes, we made this up. */ 3412 SV* const tsv = sv_2mortal(newSVsv(left)); 3413 3414 SvUTF8_on(tsv); 3415 sv_utf8_downgrade(tsv, FALSE); 3416 tmps = SvPV_const(tsv, len); 3417 } 3418 # ifdef USE_ITHREADS 3419 # ifdef HAS_CRYPT_R 3420 if (!PL_reentrant_buffer->_crypt_struct_buffer) { 3421 /* This should be threadsafe because in ithreads there is only 3422 * one thread per interpreter. If this would not be true, 3423 * we would need a mutex to protect this malloc. */ 3424 PL_reentrant_buffer->_crypt_struct_buffer = 3425 (struct crypt_data *)safemalloc(sizeof(struct crypt_data)); 3426 #if defined(__GLIBC__) || defined(__EMX__) 3427 if (PL_reentrant_buffer->_crypt_struct_buffer) { 3428 PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; 3429 /* work around glibc-2.2.5 bug */ 3430 PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; 3431 } 3432 #endif 3433 } 3434 # endif /* HAS_CRYPT_R */ 3435 # endif /* USE_ITHREADS */ 3436 # ifdef FCRYPT 3437 sv_setpv(TARG, fcrypt(tmps, SvPV_nolen_const(right))); 3438 # else 3439 sv_setpv(TARG, PerlProc_crypt(tmps, SvPV_nolen_const(right))); 3440 # endif 3441 SETTARG; 3442 RETURN; 3443 #else 3444 DIE(aTHX_ 3445 "The crypt() function is unimplemented due to excessive paranoia."); 3446 #endif 3447 } 3448
試したこと
・インストール資材を再取得し、同手順で再試行。
(追記1)
・アドバイスに従い、リンク先の内容からpp.cを修正。
改めてmake installを行うも異なるエラーで失敗。
記載文字数の都合で、melianさんのコメントへの返信にエラー内容を追記させて頂きました。
補足情報(FW/ツールのバージョンなど)
バージョン情報については、上記本文内に記載内容となります。
回答2件
あなたの回答
tips
プレビュー