基於容器構建golang靜態連線應用
阿新 • • 發佈:2020-07-21
以下是一個學習關於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/