首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在git构建过程中“无法在@INC中找到ExtUtils/MakeMaker.pm”

在git构建过程中“无法在@INC中找到ExtUtils/MakeMaker.pm”
EN

Stack Overflow用户
提问于 2018-02-22 23:31:57
回答 2查看 15.8K关注 0票数 7

我在一个非常小的系统(Ubuntu16.04 docker镜像)上构建git,没有使用包管理器(除了wgetxz-utilsmakegcc)。因此,我安装了以下必备组件:

代码语言:javascript
复制
apt-get update && apt-get install --yes wget xz-utils make gcc
wget http://www.cpan.org/src/5.0/perl-5.26.1.tar.gz && tar xf perl-5.26.1.tar.gz && cd perl-5.26.1 && ./configure.gnu && make -j16 && make install && cd ..
wget https://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.8.1.tar.xz && tar xf gettext-0.19.8.1.tar.xz && cd gettext-0.19.8.1 && ./configure && make -j16 && make install && cd ..
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xf zlib-1.2.11.tar.gz && cd zlib-1.2.11 && ./configure && make -j16 && make install && cd ..
cpan install ExtUtils::MakeMaker
wget https://www.kernel.org/pub/software/scm/git/git-2.13.3.tar.gz && tar xf git-2.13.3.tar.gz && cd git-2.13.3 && ./configure && make -j16 && make install && cd ..

但是,由于以下原因,git源根目录中的make会失败

代码语言:javascript
复制
Can't locate ExtUtils/MakeMaker.pm in @INC (you may need to install the ExtUtils::MakeMaker module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at Makefile.PL line 3.
BEGIN failed--compilation aborted at Makefile.PL line 3.
make[1]: *** [perl.mak] Error 2
Makefile:83: recipe for target 'perl.mak' failed
make: *** [perl/perl.mak] Error 2
make: *** Waiting for unfinished jobs....
Makefile:1870: recipe for target 'perl/perl.mak' failed

我知道有很多关于Can't locate [module].pm in @INC for perl项目的解决方案,How do I tell CPAN to install all dependencies?。然而,git使用的是GNU自动工具,可以解决这个问题的选项可能是从环境变量中读取的,而我到目前为止还不能理解这些环境变量。

Ubuntu16.04提供了perl,但没有cpan命令(这就是我添加perl源安装的原因)。在perl源代码安装被识别,但似乎没有使用之后:

代码语言:javascript
复制
$ which -a perl
/usr/local/bin/perl
/usr/bin/perl
$ which -a cpan
/usr/local/bin/cpan

cpan之后,我得到了

代码语言:javascript
复制
$ find / -name MakeMaker.pm
/builds/project-0/perl-5.26.1/lib/ExtUtils/MakeMaker.pm
/builds/project-0/perl-5.26.1/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
/root/.cpan/build/ExtUtils-MakeMaker-7.32-0/lib/ExtUtils/MakeMaker.pm
/root/.cpan/build/ExtUtils-MakeMaker-7.32-0/blib/lib/ExtUtils/MakeMaker.pm
/usr/local/lib/perl5/5.26.1/ExtUtils/MakeMaker.pm
/usr/local/lib/perl5/site_perl/5.26.1/ExtUtils/MakeMaker.pm
$ perl -E 'say for @INC'
/usr/local/lib/perl5/site_perl/5.26.1/x86_64-linux
/usr/local/lib/perl5/site_perl/5.26.1
/usr/local/lib/perl5/5.26.1/x86_64-linux
/usr/local/lib/perl5/5.26.1

设置是从引导脚本中抽象出来的,所以使用包管理器实际上是没有选择的。

如果您想要调查环境,可以使用docker run -i -t ubuntu:latest

我在https://gitlab.com/krichter/git-docker-build上提供了一个可复制的构建,GitLab CI runner的示例输出可以在https://gitlab.com/krichter/git-docker-build/-/jobs/53888412上找到。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-23 01:02:32

git上使用./configure --with-perl=/usr/local/bin/perl是可行的,但是我不明白为什么在/usr/bin/perl if PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin之前没有选择/usr/local/bin/perl

添加--with-perl后,cpan ExtUtils::MakeMaker不再是必需的。

票数 3
EN

Stack Overflow用户

发布于 2018-05-09 12:31:17

在CentOS7中,我遇到这个问题,我发现我应该先安装perl-devel

代码语言:javascript
复制
yum install perl-devel

然后重试。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48931247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档