ubuntu to windows

 


 
基础版本(推荐)
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags="-s -w" -o fibu.exe fibu2.go


极致压缩版本(使用 UPX)
# 先安装 UPX
sudo apt-get install upx

# 编译 + 压缩
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags="-s -w" -o myapp.exe main.go
upx --best myapp.exe  # 体积可减少 50-70%


带版本信息的发布版本
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build \
  -ldflags="-s -w -X main.Version=1.0.0 -X main.BuildTime=$(date +%Y%m%d)" \
  -o myapp.exe main.go

验证静态链接

 
在 Ubuntu 上检查(使用 file 和 ldd)
# 查看文件类型
file myapp.exe
# 输出:myapp.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows

# 检查依赖(静态编译应无外部依赖)
# 注意:ldd 对 Windows exe 无效,需到 Windows 或用 wine 测试


在 Windows 上验证 打开 PowerShell 或 CMD:powershell
# 查看依赖
dumpbin /dependents myapp.exe
# 静态编译后应只显示:KERNEL32.dll 等系统核心 DLL

# 或直接运行
myapp.exe


 


 
// "github.com/ThomasRooney/gexpect"
gexpect "github.com/google/goexpect"

go mod tidy 

剩下是修正对应的语法

推荐解决路径

 
首选:联系 gitee.com/tanpf/tools 维护者,建议替换为 github.com/google/goexpect(纯 Go)
次选:Fork 后自行修改,移除 expect 功能或使用条件编译
备选:如果 expect 是核心功能且必须保留,使用 mingw 编译并接受 DLL 依赖,或在 Linux 服务器端运行该功能

 
grep -r "gexpect" /ai/wks/gowks/src/tools/*

go mod graph | grep gexpect

 
# 安装 mingw-w64
sudo apt-get update
sudo apt-get install mingw-w64

# 使用 mingw 编译(注意:生成的 exe 会依赖 libgcc.dll)
CC=x86_64-w64-mingw32-gcc CGO_ENABLED=1 GOOS=windows GOARCH=amd64 \
  go build -o fibu.exe fibu2.go

缺点:生成的 fibu.exe 需要携带 libgcc_s_seh-1.dll 和 libwinpthread-1.dll,不是纯静态


完全静态化(需额外参数):

 
CC=x86_64-w64-mingw32-gcc CGO_ENABLED=1 GOOS=windows GOARCH=amd64 \
  go build -ldflags="-s -w -linkmode external -extldflags '-static'" \
  -o fibu.exe fibu2.go

带版本

 
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build \
  -ldflags="-s -w -X main.Version=1.0.0 -X main.BuildTime=$(date +%Y%m%d)" \
  -o myapp.exe main.go




 


 


 


参考