为了减少golang部署对操作系统动态链接库的依赖,我决定对自己的两个golang项目进行独立打包。
环境:Centos6.7 amd64
go版本:1.8
1. 首先,检查使用普通打包方式build的出的二进制文件是否有依赖,我这里是linux平台使用ldd, ios请使用otools工具。
[devuser@SZB-L0016361 main]$ ldd agent-server
linux-vdso.so.1 => (0x00007ffe069cd000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000000308ac00000)
libc.so.6 => /lib64/libc.so.6 (0x000000308a800000)
/lib64/ld-linux-x86-64.so.2 (0x000000308a400000)
2. 独立打包
[devuser@SZB-L0016361 main]$ go build -o agent-server -ldflags '-linkmode "external" -extldflags "-static"' agent-server.go
# command-line-arguments
/usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/usr/bin/ld: cannot find -lpthread
collect2: ld returned 1 exit status
在独立打包的过程中,出现上述错误,经过查找资料发现操作系统少了glibc-static包造成的
直接使用yum安装: yum install glibc-static -y
安装后再次执行上述命令已经不报错了。
然后继续使用ldd命令检查,发现已经没有动态链接库依赖。
[devuser@SZB-L0016361 main]$ ldd agent-server
not a dynamic executable