다양한 Perl 종속성을 갖는 프로그램을 설치하려고 합니다. 설치 중에 Perl 종속성 중 하나(BerkeleyDB)가 실패했습니다. 나는 Perl에 대해 아는 바가 거의 없습니다. (사용자로서) 이 문제를 해결할 수 있는 방법이 있나요? 이전 버전에서 시도할 수 있는 SPAN 명령이 있습니까?
cpan[49]> install BerkeleyDB
Running install for module 'BerkeleyDB'
Fetching with HTTP::Tiny:
https://cpan.org/authors/id/P/PM/PMQS/BerkeleyDB-0.65.tar.gz
Checksum for /root/.local/share/.cpan/sources/authors/id/P/PM/PMQS/BerkeleyDB-0.65.tar.gz ok
Configuring P/PM/PMQS/BerkeleyDB-0.65.tar.gz with Makefile.PL
Parsing config.in...
Looks Good.
Checking if your kit is complete...
Looks good
Warning (mostly harmless): No library found for -ldb
Generating a Unix-style Makefile
Writing Makefile for BerkeleyDB
Writing MYMETA.yml and MYMETA.json
PMQS/BerkeleyDB-0.65.tar.gz
/usr/bin/perl Makefile.PL -- OK
Running make for P/PM/PMQS/BerkeleyDB-0.65.tar.gz
cp BerkeleyDB/Hash.pm blib/lib/BerkeleyDB/Hash.pm
cp scan.pl blib/lib/scan.pl
cp BerkeleyDB.pod blib/lib/BerkeleyDB.pod
cp mkconsts.pl blib/lib/mkconsts.pl
cp BerkeleyDB/Btree.pm blib/lib/BerkeleyDB/Btree.pm
cp BerkeleyDB.pm blib/lib/BerkeleyDB.pm
Running Mkbootstrap for BerkeleyDB ()
chmod 644 "BerkeleyDB.bs"
"/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- BerkeleyDB.bs blib/arch/auto/BerkeleyDB/BerkeleyDB.bs 644
"/usr/bin/perl" "/usr/share/perl5/vendor_perl/ExtUtils/xsubpp" -noprototypes -typemap '/usr/share/perl5/ExtUtils/typemap' -typemap '/root/.local/share/.cpan/build/BerkeleyDB-0.65-0/typemap' BerkeleyDB.xs > BerkeleyDB.xsc
Warning: Found a 'CODE' section which seems to be using 'RETVAL' but no 'OUTPUT' section. in BerkeleyDB.xs, line 5936
Warning: Found a 'CODE' section which seems to be using 'RETVAL' but no 'OUTPUT' section. in BerkeleyDB.xs, line 5964
mv BerkeleyDB.xsc BerkeleyDB.c
gcc -c -I/usr/local/BerkeleyDB/include -D_REENTRANT -D_GNU_SOURCE -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fwrapv -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -g -DVERSION=\"0.65\" -DXS_VERSION=\"0.65\" -fPIC "-I/usr/lib64/perl5/CORE" BerkeleyDB.c
BerkeleyDB.xs:76:10: fatal error: db.h: No such file or directory
76 | #include <db.h>
| ^~~~~~
compilation terminated.
make: *** [Makefile:349: BerkeleyDB.o] Error 1
PMQS/BerkeleyDB-0.65.tar.gz
/usr/bin/make -- NOT OK
Failed during this command:
PMQS/BerkeleyDB-0.65.tar.gz : make NO
답변1
출력을 보면 다음 줄을 볼 수 있습니다.
BerkeleyDB.xs:76:10: fatal error: db.h: No such file or directory
개발 헤더와 이를 제공하는 패키지가 누락되었기 때문에 빌드됩니다.
사용 중인 OS를 명시하지 않았지만 Fedora, RHEL, Alma, Rocky 등에서는 다음 명령을 사용하여 파일을 제공하는 OS를 확인할 수 있습니다.
yum provides */db.h
dnf provides */db.h
이것은 반환하기 때문에 매우 간단합니다 libdb-devel-5.3.28-53.el9.x86_64 : C development files for the Berkeley DB library
. 이는 분명히 필요한 것입니다.
데비안, 우분투 등은 조금 더 까다롭습니다.
이를 사용하여 apt-file search db.h
해당 문자열이 포함된 패키지를 반환한 다음 grep할 수 있지만 원하는 것이 무엇인지 알아야 합니다. 더 나은 선택은가는 것입니다https://packages.ubuntu.com파일이 포함된 패키지를 검색합니다 db.h
. 패키지 이름이 표시 libdb5.3-dev
되며 을 사용하면 apt show libdb5.3-dev
다음 줄이 반환되어 매우 명확해집니다.
Description: Berkeley v5.3 Database Libraries [development]
This is the development package which contains headers and static
libraries for the Berkeley v5.3 database library.
파일은 다음 위치에 있을 가능성이 높 /usr/include/db.h
으므로 다음을 사용할 수도 있습니다.
apt-file search /usr/include/db.h
반환됩니다
libdb5.3-dev: /usr/include/db.h
그런 다음 패키지를 설치하면 설치가 cpan
작동합니다.