cgo linux arm,Golang交叉编译各个平台的二进制文件
熟悉golang的人都知道,golang交叉編譯很簡單的,只要設置幾個環境變量就可以了
# mac上編譯linux和windows二進制
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
# linux上編譯mac和windows二進制
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
# windows上編譯mac和linux二進制
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go
SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go
GOOS和GOARCH的值有哪些,可以網上搜,很多的
GOOS和GOARCH支持列表
GOOS - Target Operating System
GOARCH - Target Platform
android
arm
darwin
386
darwin
amd64
darwin
arm
darwin
arm64
dragonfly
amd64
freebsd
386
freebsd
amd64
freebsd
arm
linux
386
linux
amd64
linux
arm
linux
arm64
linux
ppc64
linux
ppc64le
linux
mips
linux
mipsle
linux
mips64
linux
mips64le
netbsd
386
netbsd
amd64
netbsd
arm
openbsd
386
openbsd
amd64
openbsd
arm
plan9
386
plan9
amd64
solaris
amd64
windows
386
windows
amd64
env GOOS=target-OS GOARCH=target-architecture go build package-import-path
但是交叉編譯是不支持CGO的,也就是說如果你的代碼中存在C代碼,是編譯不了的,比如說你的程序中使用了sqlite數據庫,在編譯go-sqlite驅動時按照上面的做法是編譯不通過的
需要CGO支持的,要將CGO_ENABLED的0改為1,也就是CGO_ENABLED=1,此外還需要設置編譯器,例如我想在linux上編譯arm版的二進制,需要這樣做:
# Build for arm
CGO_ENABLED=1 GOOS=linux GOARCH=arm CC=arm-linux-gnueabi-gcc go build
這個arm-linux-gnueabi-gcc是個啥東西,怎么安裝,如果你系統是ubuntu的話,可以按照下面命令安裝:
sudo apt-get install g++-arm-linux-gnueabi
sudo apt-get install gcc-arm-linux-gnueabi
在linux上編譯arm平臺的二進制
sudo apt-get install libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi libncurses5-dev
sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
CGO_ENABLED=1 GOOS=linux GOARCH=arm go build
在linux上編譯arm64平臺的二進制
sudo apt-get install gcc-aarch64-linux-gnu
CGO_ENABLED=1 GOOS=linux GOARCH=arm64 go build
如果提示找不到openssl/rand.h文件,可以嘗試下面的方案:
# for macOS:
brew install openssl
brew link openssl --force
或者
export CGO_LDFLAGS="-L/usr/local/opt/openssl/lib"
export CGO_CPPFLAGS="-I/usr/local/opt/openssl/include"
# for Debian, Ubuntu
sudo apt-get install libssl-dev
完成之后,重新安裝即可。
安裝成功后就可以編譯了,但是如果你想編譯mac版呢,或者想在mac上編譯linux版,window版咋辦,一個一個安裝效率太慢,系統命令可以安裝還好,系統命令不支持,那就得自己去搜,然后找到地址,下載,安裝,費時又費力
它是一個docker鏡像,里面集成了各種平臺的編譯器,按照它的教程,很輕松的可以編譯出各個平臺的二進制文件,安裝的時候比較耗時,需要下載大概1個G的數據,但是效果可是杠杠的
默認是編譯所有平臺的二進制的,會有些耗時,如果只需要某個特定平臺的二進制,可以使用-targets參數
image.png
總結
以上是生活随笔為你收集整理的cgo linux arm,Golang交叉编译各个平台的二进制文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux高通平台代码,高通linux系
- 下一篇: linux动态分配全局置换,深入理解计算