我对从 amd64 到 arm7l 的交叉编译感到头疼
我终于可以使用 Gitlab CI 来完成此操作,所以现在,我在 docker 映像中编译二进制文件,这是 dockerfile:
FROM golang
WORKDIR /go/src/gitlab.com/company/edge_to_bc
COPY . .
RUN dpkg --add-architecture armhf && apt update && apt-get install -y gcc-arm-linux-gnueabihf libltdl-dev:armhf
我将其构建为然后我将构建新容器“交叉编译”并准备好名称ubuntu:cross-compil
现在,我可以使用以下命令编译我的二进制文件:
docker run -it -v ${EDGE_TO_BC_PATH}/release:/go/src/gitlab.com/company/edge_to_bc/release ubuntu:cross-compil bash -c 'CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 go build -v -o ./release/edge_to_bc '
我可以看到生成的可执行文件./release/edge_to_bc
然后我构建我的 docker 镜像:
docker build -t registry.gitlab.com/company/edge_to_bc:armhf .
我推动它。
在 Dockerfile 中,我只是从主机复制可执行文件:
FROM alpine:3.7
RUN apk --no-cache add ca-certificates libtool
WORKDIR /sunclient/
COPY ./release/edge_to_bc ./
EXPOSE 5555
CMD [ "./edge_to_bc" ]
但是当我在我的臂板上运行它时:
docker run --rm registry.gitlab.com/company/edge_to_bc:armhf
我得到:
standard_init_linux.go:207: exec user process caused "no such file or directory"
调试时,如果我想获取文件列表
docker run --rm registry.gitlab.com/company/edge_to_bc:armhf
我得到:
standard_init_linux.go:207: exec user process caused "exec format error"
这表明二进制仍然没有正确的格式......
我错过了什么 ?我在这个话题上花了很多时间,并没有更多的想法。
眼眸繁星
相关分类