Apple M1 Docker error cc1plus: error: unknown value 'armv8-a-march=armv8-a' for -march
Apple M1 Docker error cc1plus: error: unknown value 'armv8-a-march=armv8-a' for -march
在使用 M1 芯片的 Mac OS BigSur 上构建 docker 图像时出现此错误。
我试过的方法:从 docker 站点
安装 docker Apple Silicon Graphic M1
尝试从 Docker
安装 RocksDB 时失败
# docker.local
FROM golang:1.12.4-alpine3.9
RUN apk add bash build-base grep git
# Install RocksDB
RUN apk add coreutils linux-headers perl zlib-dev bzip2-dev lz4-dev snappy-dev zstd-libs zstd-dev && \
cd /tmp && \
wget -O - https://github.com/facebook/rocksdb/archive/v5.18.3.tar.gz | tar xz && \
cd /tmp/rocksdb* && \
make -j $(nproc) install-shared OPT=-g0 USE_RTTI=1 && \
rm -R /tmp/rocksdb* && \
apk del coreutils linux-headers perl
错误:
#6 9.903 cc1plus: error: unknown value 'armv8-a-march=armv8-a' for -march
#6 9.903 cc1plus: note: valid arguments are: armv8-a armv8.1-a armv8.2-a armv8.3-a armv8.4-a native
#6 9.906 cc1plus: error: unknown value 'armv8-a-march=armv8-a' for -march
#6 9.906 cc1plus: note: valid arguments are: armv8-a armv8.1-a armv8.2-a armv8.3-a armv8.4-a native
#6 9.907 install -d /usr/local/lib
#6 9.908 CC shared-objects/cache/clock_cache.o
#6 9.908 CC shared-objects/cache/lru_cache.o
#6 9.909 CC shared-objects/cache/sharded_cache.o
#6 9.909 for header_dir in `find "include/rocksdb" -type d`; do \
#6 9.909 install -d /usr/local/$header_dir; \
#6 9.909 done
#6 9.911 cc1plus: error: unknown value 'armv8-a-march=armv8-a' for -march
#6 9.911 cc1plus: note: valid arguments are: armv8-a armv8.1-a armv8.2-a armv8.3-a armv8.4-a native
#6 9.912 make: *** [Makefile:684: shared-objects/cache/clock_cache.o] Error 1
#6 9.912 make: *** Waiting for unfinished jobs....
#6 9.912 make: *** [Makefile:684: shared-objects/cache/lru_cache.o] Error 1
#6 9.913 make: *** [Makefile:684: shared-objects/cache/sharded_cache.o] Error 1
#6 9.914 for header in `find "include/rocksdb" -type f -name *.h`; do \
#6 9.914 install -C -m 644 $header /usr/local/$header; \
#6 9.914 done
有几个问题需要解决。您拥有的 docker 文件将下载一个基本的 golang ARM 映像,并尝试使用它来构建。没关系,只要所需的库“知道如何”使用 arm 架构进行构建即可。如果他们不知道如何在 arm 下构建(这里似乎就是这种情况),您可能想尝试在 golang 的 AMD 映像下构建。
英特尔/AMD 容器将在 M1 上 运行 ARM docker 下。有几种方法可以在 M1 上构建 AMD 容器。您可以使用 buildkit,然后:
docker buildx build --platform linux/amd64 .
或者,您可以通过修改 Dockerfile
以包含类似以下内容来将拱门添加到源图像:
FROM --platform=linux/amd64 golang:1.12.4-alpine3.9
这将使用 golang 映像的 amd64 arch(假设存在)。这是我在 ARM 上构建镜像时经常使用的。即使 docker 是原生 ARM,这也有效。
在使用 M1 芯片的 Mac OS BigSur 上构建 docker 图像时出现此错误。
我试过的方法:从 docker 站点
安装 docker Apple Silicon Graphic M1尝试从 Docker
安装 RocksDB 时失败# docker.local
FROM golang:1.12.4-alpine3.9
RUN apk add bash build-base grep git
# Install RocksDB
RUN apk add coreutils linux-headers perl zlib-dev bzip2-dev lz4-dev snappy-dev zstd-libs zstd-dev && \
cd /tmp && \
wget -O - https://github.com/facebook/rocksdb/archive/v5.18.3.tar.gz | tar xz && \
cd /tmp/rocksdb* && \
make -j $(nproc) install-shared OPT=-g0 USE_RTTI=1 && \
rm -R /tmp/rocksdb* && \
apk del coreutils linux-headers perl
错误:
#6 9.903 cc1plus: error: unknown value 'armv8-a-march=armv8-a' for -march
#6 9.903 cc1plus: note: valid arguments are: armv8-a armv8.1-a armv8.2-a armv8.3-a armv8.4-a native
#6 9.906 cc1plus: error: unknown value 'armv8-a-march=armv8-a' for -march
#6 9.906 cc1plus: note: valid arguments are: armv8-a armv8.1-a armv8.2-a armv8.3-a armv8.4-a native
#6 9.907 install -d /usr/local/lib
#6 9.908 CC shared-objects/cache/clock_cache.o
#6 9.908 CC shared-objects/cache/lru_cache.o
#6 9.909 CC shared-objects/cache/sharded_cache.o
#6 9.909 for header_dir in `find "include/rocksdb" -type d`; do \
#6 9.909 install -d /usr/local/$header_dir; \
#6 9.909 done
#6 9.911 cc1plus: error: unknown value 'armv8-a-march=armv8-a' for -march
#6 9.911 cc1plus: note: valid arguments are: armv8-a armv8.1-a armv8.2-a armv8.3-a armv8.4-a native
#6 9.912 make: *** [Makefile:684: shared-objects/cache/clock_cache.o] Error 1
#6 9.912 make: *** Waiting for unfinished jobs....
#6 9.912 make: *** [Makefile:684: shared-objects/cache/lru_cache.o] Error 1
#6 9.913 make: *** [Makefile:684: shared-objects/cache/sharded_cache.o] Error 1
#6 9.914 for header in `find "include/rocksdb" -type f -name *.h`; do \
#6 9.914 install -C -m 644 $header /usr/local/$header; \
#6 9.914 done
有几个问题需要解决。您拥有的 docker 文件将下载一个基本的 golang ARM 映像,并尝试使用它来构建。没关系,只要所需的库“知道如何”使用 arm 架构进行构建即可。如果他们不知道如何在 arm 下构建(这里似乎就是这种情况),您可能想尝试在 golang 的 AMD 映像下构建。
英特尔/AMD 容器将在 M1 上 运行 ARM docker 下。有几种方法可以在 M1 上构建 AMD 容器。您可以使用 buildkit,然后:
docker buildx build --platform linux/amd64 .
或者,您可以通过修改 Dockerfile
以包含类似以下内容来将拱门添加到源图像:
FROM --platform=linux/amd64 golang:1.12.4-alpine3.9
这将使用 golang 映像的 amd64 arch(假设存在)。这是我在 ARM 上构建镜像时经常使用的。即使 docker 是原生 ARM,这也有效。