天天看點

Golang交叉編譯(跨平台編譯)的使用

在CMD指令行中編譯

設定Linux編譯環境

SET CGO_ENABLED=0
set GOARCH=amd64
set GOOS=linux

//CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7

// 開始編譯
go build -o ./build/ ./main.go
在windows10之前的系統版本上使用cmd指令行可以使用上述指令編譯      

powershell指令行中

在powershell指令行中編譯(示例編譯64位linux程式)

// 設定Linux編譯環境
$env:CGO_ENABLED="0"
$env:GOOS="linux"
$env:GOARCH="amd64"      

一、CGO_ENABLED

作用:

用于辨別(聲明) cgo 工具是否可用

意義:

存在交叉編譯的情況時,cgo 工具是不可用的。在标準 go 指令的上下文環境中,交叉編譯意味着程式建構環境的目标計算架構的辨別與程式運作環境的目标計算架構的辨別不同,或者程式建構環境的目标作業系統的辨別與程式運作環境的目标作業系統的辨別不同

關閉 cgo 後,在建構過程中會忽略 cgo 并靜态連結所有的依賴庫,而開啟 cgo 後,方式将轉為動态連結

二、GOOS

用于辨別(聲明)程式建構環境的目标作業系統

如:linux 、windows

三、GOARCH

用于辨別(聲明)程式建構環境的目标計算架構,若不設定,預設值與程式運作環境的目标計算架構一緻

系統 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

四、GOHOSTOS

用于辨別(聲明)程式運作環境的目标作業系統

五、GOHOSTARCH

用于辨別(聲明)程式運作環境的目标計算架構

六、go build

  • ​-a​

    強制重新編譯,簡單來說,就是不利用緩存或已編譯好的部分檔案,直接所有包都是最新的代碼重新編譯和關聯

  • ​-installsuffix​

  • 作用:在軟體包安裝的目錄中增加字尾辨別,以保持輸出與預設版本分開
  • 補充:如果使用 -race 辨別,則字尾就會預設設定為 -race 辨別,用于差別 race 和普通的版本
  • ​-o​

    指定編譯後的可執行檔案名稱

背景運作

//修改權限指令
chmod 777 程式名稱

//背景運作的指令
nohup ./程式名 &

//不輸出錯誤資訊
nohup ./程式名 >/dev/null 2>&1 &

//如果要關閉程式,可以使用指令”ps” 檢視背景程式的pid,然後使用“kill 程式pid”指令,關閉程式比如程式名為test,可以用如下指令查詢

ps aux|grep test

//關掉程序
kill 程序編号

//開機啟動glang
vi /etc/rc.local
cd gopath
nohup ./main &      

1.nohup

  1. 用途:不挂斷地運作指令。
  2. 文法:nohup Command [ Arg … ] [ & ]
  • 無論是否将 nohup 指令的輸出重定向到終端,輸出都将附加到目前目錄的 nohup.out 檔案中。
  • 如果目前目錄的 nohup.out 檔案不可寫,輸出重定向到 $HOME/nohup.out 檔案中。
  • 如果沒有檔案能建立或打開以用于追加,那麼 Command 參數指定的指令不可調用。
  1. 退出狀态:該指令傳回下列出口值:
  • 126 可以查找但不能調用 Command 參數指定的指令。
  • 127 nohup 指令發生錯誤或不能查找由 Command 參數指定的指令。
  • 否則,nohup 指令的退出狀态是 Command 參數指定指令的退出狀态。

2. &

用途:在背景運作

一般兩個一起用

​nohup command &​

nohup redis-server ./main >/dev/null 2>&1 &      

檢視運作的背景程序

(1)​

​jobs -l​

(2)​

​ps -ef​

ps -aux|grep test.js      
  • ​a​

    ​: 顯示所有程式
  • ​u​

    ​: 以使用者為主的格式來顯示
  • ​x​

    ​: 顯示所有程式,不以終端機來區分

3. windows上

  • -s 省略符号表和調試資訊
  • -w Omit the DWARF symbol table 省略DWARF符号表
  • -H windowsgui 不列印資訊到console (On Windows, -H windowsgui writes a "GUI binary" instead of a "console binary."),就不會有cmd視窗了

curl 指令測試

curl  -d "username=test&pwd=123456"  http://serverIP/webAuth/index.htm/form1      

繼續閱讀