最近中间件来了一位新同学,帮忙将goscon的重构了,着重提升了goscon的网络读写性能。这个修改通过cgo的方式引入了Linux的epoll,比golang原生的网络读写好多了。但是在QC同学的祖传ubuntu 16.04镜像上,死活编译不通过,网上也没找到资料,所以留一篇记录,方便以后查询

报错信息:

/usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-build642101652/b001/exe/a.out: 最后的关闭失败: 无效的操作
collect2: error: ld returned 1 exit status

Makefile:39: recipe for target 'goscon' failed
make: *** [goscon] Error 2

export LC_ALL=C 可以将中文报错信息转换成英文报错信息:

/usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-build4186891534/b001/exe/a.out: final close failed: Invalid operation
collect2: error: ld returned 1 exit status

Makefile:39: recipe for target 'goscon' failed
make: *** [goscon] Error 2

最后在goscon的编译指令上加上了-ldflags=”-s”暂时解决了,-s是disable symbol table,还不清楚为啥要关闭符号表才能编译通过。我猜是gcc版本太低,因为我在ubuntu 1804上,gcc 7.5可以顺利编译过的,在ubuntu1604上带的gcc 5.3死活过不了。本来想升级gcc来验证这个想法,无奈祖传镜像不认ppa的证书,算了