Go 1.5+:错误 - 导入运行时:不使用 cgo 或 SWIG 时不允许使用 C 源文件
Go 1.5+ : Error - imports runtime: C source files not allowed when not using cgo or SWIG
我的程序是用 go 1.4.2 完美构建的。安装 go 1.5 后,出现以下错误。
imports runtime: C source files not allowed when not using cgo or
SWIG: atomic_amd64x.c defs.c float.c heapdump.c lfstack.c malloc.c
mcache.c mcentral.c mem_linux.c mfixalloc.c mgc0.c mheap.c msize.c
os_linux.c panic.c parfor.c proc.c runtime.c signal.c signal_amd64x.c
signal_unix.c stack.c string.c sys_x86.c vdso_linux_amd64.c
该错误与程序无关。即使是 "Hello world" 个程序也会抛出同样的错误。
Remove Old 1.4.x go installation and then install go 1.5.
我在安装go 1.5后遇到了同样的问题。问题是我在 1.4.2 的同一个地方安装了 go 1.5。 Go 1.5 不再使用 C,如果存在旧的 C 安装文件,它会抛出如图所示的错误。
如果您希望旧安装也存在,则将 1.5 安装到其他位置并将 GOROOT 设置到该位置。
希望对您有所帮助。
编辑 1:对于 Linux 用户:
如果您下载了 go1.5*.tar.gz 那么您是这样做的:
tar -C /usr/local/ -xvf go1.5.linux-amd64.tar.gz
你的旧文件夹C文件没有被删除,所以正确的过程是:
首先:你应该删除旧的go文件夹。
sudo rm -rf /usr/local/go/
第二:然后运行
tar -C /usr/local/ -xvf go1.5.x.linux-amd64.tar.gz
如果您使用 brew
升级您的 Go 1.5。这是我让它发挥作用的步骤:
- 删除 %GOPATH% 中的 pkg 文件夹
- 重新加载终端(控制台)会话,确保
Go env
转到 Go 1.5 文件夹。
顺便说一句:如果你想通过 brew switch go 1.4.2
.
从 Go 1.5 切换回 Go 1.4.2,你需要做同样的事情
我在我的编辑器 (sublime text 2) 中遇到了这个问题。我在保存时调用 go build,看起来我的编辑器指向 go 1.4.x 而不是新安装的 1.5。
- 我通过简单地退出并重新打开我的编辑器解决了这个问题。
我有同样的问题,因为我在我的机器上安装了两个版本的 golang,一个来自官方网站,另一个来自自制软件。
而且GOROOT和go二进制文件不匹配,我只是用正确的GOROOT替换,然后完成。
export GOROOT=/usr/local/opt/go/libexec # install via brew
我的程序是用 go 1.4.2 完美构建的。安装 go 1.5 后,出现以下错误。
imports runtime: C source files not allowed when not using cgo or SWIG: atomic_amd64x.c defs.c float.c heapdump.c lfstack.c malloc.c mcache.c mcentral.c mem_linux.c mfixalloc.c mgc0.c mheap.c msize.c os_linux.c panic.c parfor.c proc.c runtime.c signal.c signal_amd64x.c signal_unix.c stack.c string.c sys_x86.c vdso_linux_amd64.c
该错误与程序无关。即使是 "Hello world" 个程序也会抛出同样的错误。
Remove Old 1.4.x go installation and then install go 1.5.
我在安装go 1.5后遇到了同样的问题。问题是我在 1.4.2 的同一个地方安装了 go 1.5。 Go 1.5 不再使用 C,如果存在旧的 C 安装文件,它会抛出如图所示的错误。
如果您希望旧安装也存在,则将 1.5 安装到其他位置并将 GOROOT 设置到该位置。
希望对您有所帮助。
编辑 1:对于 Linux 用户:
如果您下载了 go1.5*.tar.gz 那么您是这样做的:
tar -C /usr/local/ -xvf go1.5.linux-amd64.tar.gz
你的旧文件夹C文件没有被删除,所以正确的过程是:
首先:你应该删除旧的go文件夹。
sudo rm -rf /usr/local/go/
第二:然后运行
tar -C /usr/local/ -xvf go1.5.x.linux-amd64.tar.gz
如果您使用 brew
升级您的 Go 1.5。这是我让它发挥作用的步骤:
- 删除 %GOPATH% 中的 pkg 文件夹
- 重新加载终端(控制台)会话,确保
Go env
转到 Go 1.5 文件夹。
顺便说一句:如果你想通过 brew switch go 1.4.2
.
我在我的编辑器 (sublime text 2) 中遇到了这个问题。我在保存时调用 go build,看起来我的编辑器指向 go 1.4.x 而不是新安装的 1.5。
- 我通过简单地退出并重新打开我的编辑器解决了这个问题。
我有同样的问题,因为我在我的机器上安装了两个版本的 golang,一个来自官方网站,另一个来自自制软件。
而且GOROOT和go二进制文件不匹配,我只是用正确的GOROOT替换,然后完成。
export GOROOT=/usr/local/opt/go/libexec # install via brew