最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang如何交叉編譯各個平臺的二進制文件詳解

 更新時間:2018年08月23日 15:02:34   作者:路過麥田  
這篇文章主要給大家介紹了關(guān)于Golang如何交叉編譯各個平臺的二進制文件的相關(guān)資料,并介紹了golang如何讓編譯生產(chǎn)的二進制文件變小,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Golang交叉編譯平臺的二進制文件

熟悉golang的人都知道,golang交叉編譯很簡單的,只要設(shè)置幾個環(huán)境變量就可以了

# 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的值有哪些,可以網(wǎng)上搜,很多的

但是交叉編譯是不支持CGO的,也就是說如果你的代碼中存在C代碼,是編譯不了的,比如說你的程序中使用了sqlite數(shù)據(jù)庫,在編譯go-sqlite驅(qū)動時按照上面的做法是編譯不通過的

需要CGO支持的,要將CGO_ENABLED的0改為1,也就是CGO_ENABLED=1,此外還需要設(shè)置編譯器,例如我想在linux上編譯arm版的二進制,需要這樣做:

# Build for arm
CGO_ENABLED=1 GOOS=linux GOARCH=arm CC=arm-linux-gnueabi-gcc go build 

這個arm-linux-gnueabi-gcc是個啥東西,怎么安裝,如果你系統(tǒng)是ubuntu的話,可以按照下面命令安裝:

sudo apt-get install g++-arm-linux-gnueabi
sudo apt-get install gcc-arm-linux-gnueabi

安裝成功后就可以編譯了,但是如果你想編譯mac版呢,或者想在mac上編譯linux版,window版咋辦,一個一個安裝效率太慢,系統(tǒng)命令可以安裝還好,系統(tǒng)命令不支持,那就得自己去搜,然后找到地址,下載,安裝,費時又費力

github上有這個工具:https://github.com/karalabe/xgo

它是一個docker鏡像,里面集成了各種平臺的編譯器,按照它的教程,很輕松的可以編譯出各個平臺的二進制文件,安裝的時候比較耗時,需要下載大概1個G的數(shù)據(jù),但是效果可是杠杠的

默認是編譯所有平臺的二進制的,會有些耗時,如果只需要某個特定平臺的二進制,可以使用-targets參數(shù)


注意:是-targets而不是--targets,我自己測試的時候--targets是會失敗的

附:golang如何讓編譯生產(chǎn)的二進制文件變小

把Go程序變小的辦法是:

go build -ldflags "-s -w" (go install類似)

-s去掉符號表(然后panic時候的stack trace就沒有任何文件名/行號信息了,

這個等價于普通C/C++程序被strip的效果),

-w去掉DWARF調(diào)試信息,得到的程序就不能用gdb調(diào)試了。

比如,server.go是一個簡單的http server,用了net/http包。

$ go build server.go
$ ls -l server
-rwxr-xr-x 1 minux staff 4507004 2012-10-25 14:16 server
$ go build -ldflags "-s -w" server.go
$ ls -l server
-rwxr-xr-x 1 minux staff 2839932 2012-10-25 14:16 server

-s和-w也可以分開使用,一般來說如果不打算用gdb調(diào)試,-w基本沒啥損失。

-s的損失就有點大了。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Go類型斷言提取測試接口值動態(tài)類型及靜態(tài)轉(zhuǎn)換確保類型接口編譯安全

    Go類型斷言提取測試接口值動態(tài)類型及靜態(tài)轉(zhuǎn)換確保類型接口編譯安全

    這篇文章主要為大家介紹了Go類型斷言提取測試接口值動態(tài)類型及靜態(tài)轉(zhuǎn)換確保類型實現(xiàn)特定接口的編譯時安全性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 詳解go中的引用類型

    詳解go中的引用類型

    這篇文章主要介紹了go中的引用類型,文中給大家提到了值類型和引用類型的區(qū)別,通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • golang time包的用法詳解

    golang time包的用法詳解

    這篇文章主要介紹了golang time包的用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • golang json性能分析詳解

    golang json性能分析詳解

    json格式可以算我們?nèi)粘W畛S玫男蛄谢袷街涣?,Go語言作為一個由Google開發(fā),號稱互聯(lián)網(wǎng)的C語言的語言,自然也對JSON格式支持很好。下面這篇文章主要給大家詳細分析介紹了golang json性能的相關(guān)資料,需要的朋友可以參考下。
    2018-02-02
  • 用go實現(xiàn)反向代理的代碼示例

    用go實現(xiàn)反向代理的代碼示例

    當(dāng)實現(xiàn)反向代理時,Go語言是一個強大而受歡迎的選擇,Go具有出色的并發(fā)性和網(wǎng)絡(luò)編程支持,使其成為構(gòu)建高性能反向代理的理想工具,在本文中,我將介紹如何使用Go語言實現(xiàn)一個簡單的反向代理服務(wù)器,并提供相應(yīng)的源代碼,需要的朋友可以參考下
    2023-06-06
  • Golang的select多路復(fù)用及channel使用操作

    Golang的select多路復(fù)用及channel使用操作

    這篇文章主要介紹了Golang的select多路復(fù)用及channel使用操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 使用Gin框架處理表單數(shù)據(jù)的操作步驟

    使用Gin框架處理表單數(shù)據(jù)的操作步驟

    在 Web 應(yīng)用開發(fā)中,表單是用戶與服務(wù)器交互的重要手段,Gin 框架對表單處理提供了高效便捷的支持,包括數(shù)據(jù)綁定、驗證等功能,在本篇博客中,我們將詳細介紹如何使用 Gin 框架處理表單數(shù)據(jù),涵蓋基礎(chǔ)操作與進階技巧,幫助初學(xué)者全面掌握表單功能,需要的朋友可以參考下
    2024-11-11
  • go goroutine 怎樣進行錯誤處理

    go goroutine 怎樣進行錯誤處理

    在 Go 語言程序開發(fā)中,goroutine 的使用是比較頻繁的,因此在日常編碼的時候 goroutine 里的錯誤處理,怎么做會比較好呢,本文就來詳細介紹一下
    2021-07-07
  • Go實踐反向代理ReverseProxy解析

    Go實踐反向代理ReverseProxy解析

    這篇文章主要為大家介紹了Go實踐反向代理示例ReverseProxy解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Golang判斷兩個鏈表是否相交的方法詳解

    Golang判斷兩個鏈表是否相交的方法詳解

    這篇文章主要為大家詳細介紹了如何通過Golang判斷兩個鏈表是否相交,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03

最新評論

赤壁市| 峨边| 温宿县| 姜堰市| 永济市| 沙湾县| 鄂州市| 新疆| 拉孜县| 姚安县| 沐川县| 商洛市| 江阴市| 即墨市| 卫辉市| 德惠市| 图们市| 临邑县| 买车| 砀山县| 南乐县| 炉霍县| 扶风县| 广南县| 平原县| 望奎县| 库尔勒市| 杭锦后旗| 开化县| 阜新| 昂仁县| 呼玛县| 九寨沟县| 新津县| 牙克石市| 富平县| 太谷县| 连州市| 吉林省| 兰考县| 广南县|