摘要:交叉編譯項目地址快上車,支持一波原文地址前言在連載九講解構建鏡像時,我們編譯可執行文件用了另外一個形式的命令,不知道你有沒有疑問說明我們將講解命令各個參數的作用,希望你在閱讀時,將每一項串聯起來,你會發現這就是交叉編譯相關的小知識
Golang交叉編譯
項目地址:https://github.com/EDDYCJY/go... (快上車,支持一波)
原文地址:https://segmentfault.com/a/11...
前言在 連載九 講解構建Scratch鏡像時,我們編譯可執行文件用了另外一個形式的命令,不知道你有沒有疑問?
$ CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o go-gin-example .說明
我們將講解命令各個參數的作用,希望你在閱讀時,將每一項串聯起來,你會發現這就是交叉編譯相關的小知識
也就是 Golang 令人心動的特性之一跨平臺編譯
一、CGO_ENABLED作用:
用于標識(聲明) cgo 工具是否可用
意義:
存在交叉編譯的情況時,cgo 工具是不可用的。在標準go命令的上下文環境中,交叉編譯意味著程序構建環境的目標計算架構的標識與程序運行環境的目標計算架構的標識不同,或者程序構建環境的目標操作系統的標識與程序運行環境的目標操作系統的標識不同
小結:
結合案例來說,我們是在宿主機編譯的可執行文件,而在 Scratch 鏡像運行的可執行文件;顯然兩者的計算機架構、運行環境標識你無法確定它是否一致(畢竟構建的 docker 鏡像還可以給他人使用),那么我們就要進行交叉編譯,而交叉編譯不支持 cgo,因此這里要禁用掉它
關閉 cgo 后,在構建過程中會忽略 cgo 并靜態鏈接所有的依賴庫,而開啟 cgo 后,方式將轉為動態鏈接
補充:
golang 是默認開啟 cgo 工具的,可執行 go env 命令查看
$ go env GOARCH="amd64" GOBIN="" GOCACHE="/root/.cache/go-build" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" ... GCCGO="gccgo" CC="gcc" CXX="g++" CGO_ENABLED="1" ...二、GOOS
用于標識(聲明)程序構建環境的目標操作系統
如:
linux
windows
三、GOARCH用于標識(聲明)程序構建環境的目標計算架構
若不設置,默認值與程序運行環境的目標計算架構一致(案例就是采用的默認值)
如:
amd64
386
系統 | GOOS | GOARCH |
---|---|---|
Windows 32位 | windows | 386 |
Windows 64位 | windows | amd64 |
OS X 32位 | darwin | 386 |
OS X 64位 | darwin | amd64 |
Linux 32位 | linux | 386 |
Linux 64位 | linux | amd64 |
用于標識(聲明)程序運行環境的目標操作系統
五、GOHOSTARCH用于標識(聲明)程序運行環境的目標計算架構
六、go build -a強制重新編譯,簡單來說,就是不利用緩存或已編譯好的部分文件,直接所有包都是最新的代碼重新編譯和關聯
-installsuffix作用:
在軟件包安裝的目錄中增加后綴標識,以保持輸出與默認版本分開
補充:
如果使用 -race 標識,則后綴就會默認設置為 -race 標識,用于區別 race 和普通的版本
-o指定編譯后的可執行文件名稱
小結大部分參數指令,都有一定關聯性,且與交叉編譯的知識點相關,可以好好品味一下
最后可以看看 go build help 加深了解
$ go help build usage: go build [-o output] [-i] [build flags] [packages] ... -a force rebuilding of packages that are already up-to-date. -n print the commands but do not run them. -p n the number of programs, such as build commands or test binaries, that can be run in parallel. The default is the number of CPUs available. -race enable data race detection. Supported only on linux/amd64, freebsd/amd64, darwin/amd64 and windows/amd64. -msan enable interoperation with memory sanitizer. Supported only on linux/amd64, and only with Clang/LLVM as the host C compiler. -v print the names of packages as they are compiled. -work print the name of the temporary work directory and do not delete it when exiting. -x print the commands. -asmflags "[pattern=]arg list" arguments to pass on each go tool asm invocation. -buildmode mode build mode to use. See "go help buildmode" for more. -compiler name name of compiler to use, as in runtime.Compiler (gccgo or gc). -gccgoflags "[pattern=]arg list" arguments to pass on each gccgo compiler/linker invocation. -gcflags "[pattern=]arg list" arguments to pass on each go tool compile invocation. -installsuffix suffix a suffix to use in the name of the package installation directory, in order to keep output separate from default builds. If using the -race flag, the install suffix is automatically set to race or, if set explicitly, has _race appended to it. Likewise for the -msan flag. Using a -buildmode option that requires non-default compile flags has a similar effect. -ldflags "[pattern=]arg list" arguments to pass on each go tool link invocation. -linkshared link against shared libraries previously created with -buildmode=shared. -pkgdir dir install and load all packages from dir instead of the usual locations. For example, when building with a non-standard configuration, use -pkgdir to keep generated packages in a separate location. -tags "tag list" a space-separated list of build tags to consider satisfied during the build. For more information about build tags, see the description of build constraints in the documentation for the go/build package. -toolexec "cmd args" a program to use to invoke toolchain programs like vet and asm. For example, instead of running asm, the go command will run "cmd args /path/to/asm參考 本系列示例代碼". ...
go-gin-example
本系列目錄連載一 Golang介紹與環境安裝
連載二 搭建Blog API"s(一)
連載三 搭建Blog API"s(二)
連載四 搭建Blog API"s(三)
連載五 使用JWT進行身份校驗
連載六 編寫一個簡單的文件日志
連載七 Golang優雅重啟HTTP服務
連載八 為它加上Swagger
連載九 將Golang應用部署到Docker
連載十 定制 GORM Callbacks
連載十一 Cron定時任務
連載十二 優化配置結構及實現圖片上傳
連載十三 優化你的應用結構和實現Redis緩存
連載十四 實現導出、導入 Excel
連載十五 生成二維碼、合并海報
連載十六 在圖片上繪制文字
連載十七 用 Nginx 部署 Go 應用
番外 Golang交叉編譯
番外 請入門 Makefile
書籍Go并發編程實戰 第二版
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28463.html
摘要:交叉編譯項目地址快上車,支持一波原文地址前言在連載九講解構建鏡像時,我們編譯可執行文件用了另外一個形式的命令,不知道你有沒有疑問說明我們將講解命令各個參數的作用,希望你在閱讀時,將每一項串聯起來,你會發現這就是交叉編譯相關的小知識 Golang交叉編譯 項目地址:https://github.com/EDDYCJY/go... (快上車,支持一波) 原文地址:https://segme...
摘要:也可以是某個操作的名字標簽,稱為偽目標前置條件,這一項是可選參數。明明只是執行命令,為什么會打印到標準輸出上了原因默認會打印每條命令,再執行。 Golang Gin實踐 番外 請入門 Makefile 原文地址:Golang Gin實踐 番外 請入門 Makefile 前言 含一定復雜度的軟件工程,基本上都是先編譯 A,再依賴 B,再編譯 C...,最后才執行構建 如果每次都人為編排,...
摘要:將應用部署到項目地址快上車,支持一波原文地址注開始前你需要安裝好,配好鏡像源本章節源碼在分支上從本章節開始項目目錄都以為基準請配合自己本地項目靈活變動介紹在這里簡單介紹下,建議深入學習是一個開源的輕量級容器技術,讓開發者可以打包他們 將Golang應用部署到Docker 項目地址:https://github.com/EDDYCJY/go... (快上車,支持一波)原文地址:https...
閱讀 1228·2021-11-15 11:37
閱讀 2246·2021-09-30 09:55
閱讀 4483·2021-09-22 15:51
閱讀 3741·2021-09-22 15:46
閱讀 2766·2019-08-30 15:52
閱讀 423·2019-08-29 16:20
閱讀 2889·2019-08-29 15:12
閱讀 1130·2019-08-26 18:27