日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

cgo linux arm,Golang交叉编译各个平台的二进制文件

發布時間:2025/3/20 linux 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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交叉编译各个平台的二进制文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。