Ubuntu16.10下VSCode编译Go项目报错:无法禁用runtime编译优化
解决VSCode编译Go项目时出现"compile: cannot disable optimizations while compiling runtime"错误
这个错误我之前帮朋友排查过,本质是Go编译器在调试模式下无法禁用runtime包的代码优化,结合你的Ubuntu 16.10环境和VSCode配置,给你几个针对性的解决办法:
1. 调整launch.json的编译参数
你的launch.json目前缺少编译调试的相关参数,添加buildFlags可以避免强制禁用runtime的优化。修改后的配置如下:
{ "version": "0.2.0", "configurations": [ { "name": "Launch", "type": "go", "request": "launch", "mode": "debug", "remotePath": "", "port": 2345, "host": "127.0.0.1", "program": "${fileDirname}", "env": { "GOPATH":"/home/bill/test/go", "GOROOT":"/usr/local/go" }, "args": [], "buildFlags": "-gcflags=\"-N -l\"" } ] }
注意这里的-gcflags="-N -l"没有加all=,这样只会禁用当前项目代码的优化,不会影响runtime包的编译,就能避开这个错误。
2. 升级Go版本
Ubuntu 16.10默认的Go版本通常比较老旧(比如Go 1.7或1.8),这类版本在调试时对runtime的优化限制比较严格。你可以手动下载并安装较新的稳定版本(比如Go 1.13.x,它兼容Ubuntu 16.10):
- 下载对应版本的压缩包:
wget https://dl.google.com/go/go1.13.15.linux-amd64.tar.gz - 解压到/usr/local:
sudo tar -C /usr/local -xzf go1.13.15.linux-amd64.tar.gz - 确认环境变量
GOROOT和PATH已经指向新的Go版本
3. 检查VSCode Go插件的全局设置
有时候全局设置里的编译参数会覆盖项目配置:
- 打开VSCode的设置(快捷键
Ctrl+,) - 搜索
go.buildFlags - 如果看到设置了
-gcflags="all=-N -l",把它改成-gcflags="-N -l",或者直接清空这个全局设置,让项目的launch.json来控制
4. 确认项目路径符合Go的传统布局
因为你用的是GOPATH模式,确保你的项目放在/home/bill/test/go/src目录下,比如你的项目代码应该在/home/bill/test/go/src/your-project-name里,这样Go编译器才能正确识别项目结构,避免误编译runtime相关的代码。
内容的提问来源于stack exchange,提问作者xiaoyiyi
相关产品推荐
相关产品推荐

