为DBI运行Mkbootstrap()=> DBIXS.h:22:20:致命错误:EXTERN.h:没有这样的文件或目录

我尝试在基于Alpine的Docker容器上安装MHA节点。 容器有perl,make和gcc通过apk。 :

RUN apk add --update perl make gcc 

MHA节点的先决条件是DBD :: mysql。 命令

 perl -MCPAN -e 'install DBD::mysql' 

导致上面给出的错误。 Google对此一无所知。

MHApipe理器所需的以下命令运行正常,但是:

 perl -MCPAN -e "install Config::Tiny" perl -MCPAN -e "install Log::Dispatch" perl -MCPAN -e "install Parallel::ForkManager" 

这个问题显然与DBI有关:

 Running Mkbootstrap for DBI () chmod 644 "DBI.bs" "/usr/bin/perl" -p -e "s/~DRIVER~/Perl/g" ./Driver.xst > Perl.xsi "/usr/bin/perl" "/usr/share/perl5/core_perl/ExtUtils/xsubpp" -typemap "/usr/share/perl5/core_perl/ExtUtils/typemap" -typemap "typemap" Perl.xs > Perl.xsc && mv Perl.xsc Perl.c cc -c -D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os -fomit-frame-pointer -DVERSION=\"1.636\" -DXS_VERSION=\"1.636\" -fPIC "-I/usr/lib/perl5/core_perl/CORE" -W -Wall -Wpointer-arith -Wbad-function-cast -Wno-comment -Wno-sign-compare -Wno-cast-qual -Wmissing-noreturn -Wno-unused-parameter Perl.c In file included from Perl.xs:7:0: DBIXS.h:22:20: fatal error: EXTERN.h: No such file or directory compilation terminated. Makefile:625: recipe for target 'Perl.o' failed make: *** [Perl.o] Error 1 TIMB/DBI-1.636.tar.gz /usr/bin/make -- NOT OK 

我能做些什么来解决它?

在安装gcc之后使用Ubuntu 14.04

您需要libperl头文件来构build特定的模块,包括DBI。 在高山看来,它们是由perl-dev软件包提供的。

http://www.perlmonks.org/bare/?node_id=486526

EXTERN.h是embedded解释器和构buildXS模块所需的perl C API的一部分。 官方的perl发行版包含所有这些文件,但是很多linux发行版并没有将它作为基本perl包的一部分进行捆绑(有些甚至省去了很多核心模块)。 应该有一个或多个用于提供C API文件的分发包。 他们通常被称为“perl dev ”或类似的东西。 (从谷歌search,它看起来像mandrage包是“perl-devel-5。*。rpm”)

所以解决scheme看起来像添加perl-dev的apk添加命令,但这是不够的:

 In file included from DBIXS.h:23:0, from Perl.xs:7: /usr/lib/perl5/core_perl/CORE/perl.h:699:23: fatal error: sys/types.h: No such file or directory compilation terminated. Makefile:628: recipe for target 'Perl.o' failed 

好的,还有更多的使用googlesearch的插件。 现在工作:

 FROM alpine ENV MHA_NODE_VERSION=0.54 \ MHA_MANAGER_VERSION=0.55 COPY ./mha/* /tmp/ # mha4mysql-manager-0.55.tar.gz # mha4mysql-node-0.54.tar.gz RUN apk add --update perl perl-dev musl-dev make gcc \ && perl -MCPAN -e 'install DBD::mysql' \ && perl -MCPAN -e "install Config::Tiny" \ && perl -MCPAN -e "install Log::Dispatch" \ && perl -MCPAN -e "install Parallel::ForkManager" \ && cd /tmp \ && tar -zxf mha4mysql-node-${MHA_NODE_VERSION}.tar.gz \ && cd mha4mysql-node-${MHA_NODE_VERSION}/ \ && perl Makefile.PL \ && make \ && make install \ && cd /tmp \ && tar -zxf mha4mysql-manager-${MHA_MANAGER_VERSION}.tar.gz \ && cd mha4mysql-manager-${MHA_MANAGER_VERSION}/ \ && perl Makefile.PL \ && make \ && make install \ && apk del make gcc musl-dev perl-dev \ && rm -rf /var/cache/apk/* ENTRYPOINT ["/usr/bin/perl", "-de0"]