有没有办法将cURL和所有deps编译到特定目录?

时间:2019-01-21 12:36:10

标签: curl compilation

我正在尝试在多个平台上为busybox编译cURL,但是一旦构建完毕,我需要将其复制到另一个Docker容器中。我以前曾为此工作过:

RUN wget -q https://curl.haxx.se/download/curl-7.63.0.tar.gz && \
    tar xzf curl-7.63.0.tar.gz && \
    cd curl-7.63.0 && \
    LIBS="-ldl" ./configure --disable-shared && \
    make && \
    make install

但是,由于某种原因,也许是我犯了一个错误,它不再是静态编译的,而是需要像libcurl,libz等之类的库。以前,我只需要libssl / libcrypto等来使它工作。

所以我的问题确实是,有没有办法将cURL及其所有deps和共享库编译到特定目录,以便我可以复制它而不是尝试构建静态链接的二进制文件进行复制?

谢谢

1 个答案:

答案 0 :(得分:0)

对于价值而言,可以通过--prefix=/build参数来实现。

用于构建(非常简化的)cURL的完整Dockerfile是:

FROM buildpack-deps:stretch-scm
ARG VERSION=7.63.0

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
      g++ gcc libc6-dev make pkg-config
RUN apt-get install -y libssl-dev

RUN wget -q https://curl.haxx.se/download/curl-${VERSION}.tar.gz && \
    tar xzf curl-${VERSION}.tar.gz

WORKDIR curl-${VERSION}

RUN ./configure --prefix=/build \
      --without-zlib \
      --disable-cookies \
      --disable-verbose \
      --disable-versioned-symbols \
      --disable-shared --enable-static \
      --disable-ftps --disable-gopher \
      --disable-imap --disable-imaps \
      --disable-ldap --disable-ldaps \
      --disable-pop3 --disable-pop3s \
      --disable-rtmp --disable-rtsp \
      --disable-dict --disable-file \
      --disable-ftp --disable-sftp \
      --disable-smb --disable-smbs \
      --disable-smtp --disable-smtps \
      --disable-telnet --disable-tftp && \
    make && \
    make install

然后您可以像这样提取它:

ARG CURL_IMAGE

FROM ${CURL_IMAGE} AS base
FROM busybox

ARG LIB_LOCATION

COPY --from=base /build/bin/curl /usr/sbin/curl
COPY --from=base ${LIB_LOCATION}/libssl.so.1.1 ${LIB_LOCATION}/libssl.so.1.1
COPY --from=base ${LIB_LOCATION}/libcrypto.so.1.1 ${LIB_LOCATION}/libcrypto.so.1.1

这很可能将来仅对我有用,但是您可以使用。

编辑:LIB_LOCATION是amd64,arm64和arm的以下之一。

/usr/lib/x86_64-linux-gnu
/usr/lib/arm-linux-gnueabihf
/usr/lib/aarch64-linux-gnu