首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为DBI ()运行Mkbootstrap => DBIXS.h:22:20:致命错误: EXTERN.h:没有这样的文件或目录

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

Stack Overflow用户
提问于 2016-06-06 18:12:11
回答 2查看 2.1K关注 0票数 1

我试着在一个基于阿尔卑斯的码头容器上安装MHA节点。容器有perl、make和通过apk的gcc。:

代码语言:javascript
复制
RUN apk add --update perl make gcc 

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

代码语言:javascript
复制
perl -MCPAN -e 'install DBD::mysql'

导致上述给定错误。谷歌对此一无所知。

然而,MHA管理器所需的以下命令运行正常:

代码语言:javascript
复制
perl -MCPAN -e "install Config::Tiny"
perl -MCPAN -e "install Log::Dispatch"
perl -MCPAN -e "install Parallel::ForkManager"

问题显然与DBI有关:

代码语言:javascript
复制
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

我能做些什么来解决这个问题?

安装后与Ubuntu 14.04兼容,使gcc

EN

回答 2

Stack Overflow用户

发布于 2016-06-10 00:52:26

您需要libperl头文件才能构建某些模块,包括DBI。在阿尔卑斯山上,它们看起来是由perl-dev包提供的。

票数 2
EN

Stack Overflow用户

发布于 2016-06-10 05:34:24

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

perl EXTERN.h是

C API的一部分,它是嵌入解释器和构建XS模块所必需的。官方的perl发行版包含所有这些文件,但许多linux发行版没有将其捆绑为基础perl包的一部分(有些甚至省略了许多核心模块)。您的发行版应该有一个或多个额外的包来提供C API文件。它们通常被称为"perl-dev“或类似的东西。(从googling上看,mandrage包是"perl-devel-5.*.rpm")

因此,解决方案看起来像是将perl-dev添加到apk add命令中,但这还不够:

代码语言:javascript
复制
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

好的,更多的谷歌搜索也得到了addin musl-dev。现在它起作用了:

代码语言:javascript
复制
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"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37654790

复制
相关文章

相似问题

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