go - 交叉编译go-sqlite3

来源:囧囧妹 更多频道 10 次阅读
摘要:最近服务端用到了sqlite,因为服务端用go进行编写的,在移植完go-sqlite3也编写完程序调试好后,要移植到服务器上,碰巧的是调试机用的mac os,而服务器的系统用的ubuntu,在移植过程中碰到的主要问题就是go用到的sqlite如何跨平台。 编译问题报错: go的跨平台编译一直做的都非常不错,之前我用go开发的程序在mac上都非常顺利的编译出amd64,mips等平台的可执行程序,

最近服务端用到了sqlite,因为服务端用go进行编写的,在移植完go-sqlite3也编写完程序调试好后,要移植到服务器上,碰巧的是调试机用的mac os,而服务器的系统用的ubuntu,在移植过程中碰到的主要问题就是go用到的sqlite如何跨平台。

编译问题报错:

go的跨平台编译一直做的都非常不错,之前我用go开发的程序在mac上都非常顺利的编译出amd64,mips等平台的可执行程序,部署也非常方便,而go-sqlite3是支持database/sql接口,那么基于cgo的问题也就有了,在默认情况下cgo是不允许交叉编译的,有用docker解决这个问题的(感觉大材小用),但在社区中找到一种很棒的方法。

交叉编译go环境变量组合:

$GOOS        $GOARCHandroid     armdarwin      386darwin      amd64darwin      armdarwin      arm64dragonfly   amd64freebsd     386freebsd     amd64freebsd     armlinux       386linux       amd64linux       armlinux       arm64linux       ppc64linux       ppc64lelinux       mipslinux       mipslelinux       mips64linux       mips64lenetbsd      386netbsd      amd64netbsd      armopenbsd     386openbsd     amd64openbsd     armplan9       386plan9       amd64solaris     amd64windows     386windows     amd64

下面说下go-sqlite的交叉编译:

1,在mac配置交叉编译环境

        export CGO_ENABLED=1(默认该值是0,因为要编译cgo所以配置为1)         export GOOS=linux         export GOARCH=amd64

2,Mac上安装linux的交叉编译器

     交叉编译器网站下载:

3,配置交叉编译器环境变量

       export CC=/usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-gcc

4,编译

CC=/usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-gcc CGO_ENABLED=1 GOARCH=amd64 GOOS=linux go build main.go 

通过,将可执行程序直接扔到服务器,完美运行。

相关推荐
评论区

登录后即可参与讨论

立即登录