Golang中国

我的开发环境是Windows,go版本是1.5.2,数据库驱动是go-sqlite3,在编译Windows版本的时候能正常编译和运行,但是我想交叉编译一个Linux版本的时候就出问题了,我的编译命令是这样的:

set GOARCH=amd64
set GOOS=linux
go build

系统提示:

C source files not allowed when not using cgo or SWIG: sqlite3-binding.c

在网上找了下,有个解决方法,编译的时候加个设置:set CGO_ENABLED=1
也就是这样编译:

set GOARCH=amd64
set GOOS=linux
set CGO_ENABLED=1
go build

这样编译就不会报刚才那个错误,但是又有下面这个错误:

error: -fPIC ignored for target (all code is position independent) [-Werror]
int main() { return 0; }
^
cc1.exe: all warnings being treated as errors

这个提示Google好像都找不到解决方法了,请问是哪儿出问题了?是我的编译环境有问题吗?我的GCC版本是:gcc version 4.8.0 (rubenvb-4.8.0)
请大家帮忙看看我是哪儿出了问题,不包含go-sqlite3包的时候交叉编译没问题。


shook 于 2016-01-08 17:03 修改
3 回复
hoysoft
#1 hoysoft • 2016-01-12 09:50

我也遇到了,快疯了。
我在mac下,设置CGO_ENABLED=1后,报错:
runtime/cgo
ld: unknown option: —build-id=none
clang: error: linker command failed with exit code 1 (use -v to see invocation)

shook
#2 shook • 2016-01-17 22:20

@hoysoft
我的问题已经解决了,我直接不用Windows,换用Linux系统进行开发了。
而且我想我明白我哪儿出问题了,go-sqlite3是要先go install安装的,安装后会在pkg包里面生成.a的引用文件,不同系统生成的.a文件不一样,我在Windows下go install生成的是Windows的导入文件,所以交叉编译的时候就出错了。
我想你先go install一个Linux版本的go-sqlite3导入文件,然后再交叉编译应该就可以了,不过我已经换了Linux了,没测试过不知道行不行得通。

ghiewa
#3 ghiewa • 2017-06-09 17:37
需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。