您的位置:首页 > 数据库 > SQL

go-sqlite3交叉编译问题

2019-11-10 10:33 2091 查看

由于go-sqlite3是使用cgo来编写的,cgo是不可以进行交叉编译的,自己需要将mac上编写的代码部署到linux上时无法编译问题,搜索了资料后发现可以通过docker的方式来实现,在mac上安装好docker并拉取golang的镜像执行命令进行编译 ---我本地go版本为1.12.7所以我下载了golang的1.12.13这个镜像

docker run --rm -it -v /Users/Snake/go:/go golang:1.12.13 bash -c 'cd $GOPATH/src/go-iot && go build'

编译通过后把执行文件放到linux服务器上执行结果报错了

/lib64/libc.so.6: version `GLIBC_2.28' not found

原因是libc版本的问题,由于我的linux服务器为centos 7 最多只支持2.17版本的libc

# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE

在不想升级libc的情况下有没有办法可以解决这个问题,想了想这个可能是因为golang 1.12.13这个镜像的libc本身就很高的原因,如果使用低版本的镜像会不会就可以了,抱着这个想法重新换一个golang镜像这次我使用golang 1.10版本的

docker run --rm -it -v /Users/Snake/go:/go golang:1.10 bash -c 'cd $GOPATH/src/go-iot && go build'

编译成功后上传到linux服务器上执行成功

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息