您现在的位置是:首页 >其他 >通过docker进行golang交叉编译 到mipsle平台网站首页其他
通过docker进行golang交叉编译 到mipsle平台
简介通过docker进行golang交叉编译 到mipsle平台
首先为什么会想着用docker来进行交叉编译呢?
- 因为Mac的darwin 系统在进行向mipsle平台编译时,很难找到合适的交叉编译链
- Linux 平台下比较容易向mipsle平台编译,也有很多博客可以参考
创建Dockerfile文件
FROM ubuntu:18.04
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y wget
RUN apt-get install -y tar
RUN apt-get install -y vim
RUN wget https://golang.google.cn/dl/go1.18.5.linux-amd64.tar.gz
RUN tar xfz go1.18.5.linux-amd64.tar.gz -C /usr/local
ENV GO111MODULE=on
CGO_ENABLED=1
GOOS=linux
GOARCH=mipsle
CC=/opt/bin/mipsel-linux-uclibc-gcc
CXX=/opt/bin/mipsel-linux-uclibc-g++
GOROOT=/usr/local/go
GOPATH=$HOME/gowork
GOBIN=$GOPATH/bin
PATH=/opt/bin
PATH=/bin:/usr/bin:$PATH
PATH=$GOPATH:$GOBIN:$GOROOT/bin:$PATH
WORKDIR /encryptionGateway
COPY go.mod .
COPY go.sum .
COPY mipsel-linux-uclibc.tar.xz .
RUN tar xvf mipsel-linux-uclibc.tar.xz -C /opt
RUN /usr/local/go/bin/go mod download
COPY . .
RUN sh ./build.sh
创建一个ubuntu的系统环境镜像文件
- 安装wget,是为了下载比较新的版本的golang文件,apt-get只能获取到1.10版本的golang,低于1.14版本的golang是没法使用go mod的
- 安装tar,解压下载的golang压缩包到指定的目录,解压上传的编译链压缩包到指定的目录
- 安装vim,用于编辑文本
- ENV指定一些环境变量,特别是CGO_ENABLED,GOOS,GOARCH等参数
- WORKDIR指定文件目录
- COPY拷贝文件数据,先拷贝go.mod,是go程序的依赖文件
- COPY ipsel-linux-uclibc.tar.xz文件,并进行解压----交叉编译链文件
- 下载go依赖
- 上传项目到工作目录
- sh ./build.sh 运行脚本文件生成执行二进制文件
- docker run -it docker_image_id 进入容器,得到运行容器的id
- 拷贝文件
- 容器中的二进制文件到宿主机
- docker cp 04f6fc34b86e:/encryptionGateway/guazai/main /Users/lyr/Desktop/work/encryptionGateway/guazai
- docker cp 容器id:容器文件地址 宿主机地址
- 宿主机的文件到容器
- docker cp /Users/lyr/Desktop/work/encryptionGateway/guazai 04f6fc34b86e:/encryptionGateway/guazai/main
- docker cp 宿主机文件地址 容器id:容器文件地址
- 容器中的二进制文件到宿主机
例如:
我将go build的命令写成了脚本:
#!/bin/bash
echo "开始编译..."
go build -ldflags="-s -w" -o main -v -tags netgo -installsuffix netgo -ldflags '-extldflags "-static"' -a -x -v -ldflags '-w -s -linkmode external -extldflags "-static -lpthread"'
echo "编译结束..."
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。