stdint.h 在 Alpine docker 图像中找不到

stdint.h not found in Alpine docker image

我在从 alpine:edge 构建 docker 图像时收到 error: no include path in which to search for stdint.h 错误消息,这会导致其他错误,例如 unknown type name 'uint32_t' 和编译程序失败。

据我所知,stdint.h 是 C++ 标准库的一部分,应该存在,除非 alpine:edge 中出现了某些问题,但我认为情况不会如此.

我的 docker 图片如下:

FROM alpine:edge

RUN apk update && apk add \
        git \
        make \
        gcc \
        python3 \
        ldc \
        && git clone --recursive https://github.com/lomereiter/sambamba.git \
        && cd sambamba \
        && make \
        && mv sambamba /usr/local/bin/ \
        && cd ../.. \
        && rm -r sambamba

WORKDIR /wd
ENTRYPOINT ["/usr/local/bin/sambamba"]

注意镜像alpine:edge是必须的,因为ldc包只在上面可用。如何解决这个问题?为什么找不到 stdint.h

要成功编译 Sambamba,您需要一些额外的包:

  • g++(用于 C++ 编译器和包含)
  • zlib
  • zlib-dev(用于 zlib 头文件)

总的来说,这个修改后的 Dockerfile 应该可以解决问题:

FROM alpine:edge

RUN apk update && apk add \
        git \
        make \
        gcc \
        g++ \
        zlib \
        zlib-dev \
        python3 \
        ldc \
        && git clone --recursive https://github.com/lomereiter/sambamba.git \
        && cd sambamba \
        && make \
        && mv sambamba /usr/local/bin/ \
        && cd ../.. \
        && rm -r sambamba

WORKDIR /wd
ENTRYPOINT ["/usr/local/bin/sambamba"]