1. 程式人生 > 實用技巧 >基於容器構建golang靜態連線應用

基於容器構建golang靜態連線應用

以下是一個學習關於cgo 編譯為靜態連結的學習以及記錄

參考程式碼

  • main.go
package main
import "fmt"
/*
int add(int a,int b) {return a + b;}
*/
import "C"
func main() {
 for {
  fmt.Println(C.add(1, 3))
  }
}
  • docker 構建
docker run --env GOOS=linux --env GOARCH=amd64 -i -v $PWD:/app/ golang:1.13 go build -o /app/cgo-main -ldflags '-extldflags "-static" ' /app/main.go
  • 依賴資訊檢視
ldd  ./cgo-main

file ./cgo-main

  • 檢視elf 檔案資訊
readelf -a ./cgo-main

效果

  • perf 執行

    主要是用來分析的,注意執行一段時間停止

perf trace record -ag -F 100  ./cgo-main

檢視資訊


火焰圖資訊(通過flamescope)

參考資料

https://github.com/rongfengliang/cgo-docker-build


https://blog.hashbangbash.com/2014/04/linking-golang-statically/