转1.13:gcc-5不在PATH中

时间:2019-12-07 15:22:01

标签: go gcc installation

我已经使用 brew 软件包golang在Debian Linux 10中安装了 Go 1.13.4 (以前,我已经删除了安装的golang-1.11通过 apt )。紧随brew info输出。

$ brew info golang
go: stable 1.13.4 (bottled), HEAD
Open source programming language to build simple/reliable/efficient software
https://golang.org
/home/linuxbrew/.linuxbrew/Cellar/go/1.13.4 (9,271 files, 408.1MB) *
  Poured from bottle on 2019-12-07 at 14:31:52
From: https://github.com/Homebrew/linuxbrew-core/blob/master/Formula/go.rb
==> Requirements
Required: macOS is required ✔
==> Options
--HEAD
    Install HEAD version
==> Analytics
install: 1,571 (30 days), 8,628 (90 days), 31,650 (365 days)
install-on-request: 784 (30 days), 4,096 (90 days), 13,267 (365 days)
build-error: 0 (30 days)

当我尝试在具有代码调用go build的程序包上执行native OS functions时, GO编译器告诉它无法找到如下所示的gcc-5命令。

$ go build
# _/home/giacomo/src/goproc/process
exec: "gcc-5": executable file not found in $PATH

因此,我已经从 testing (deb http://ftp.us.debian.org/debian testing main contrib non-free)存储库中安装了最新的 GCC(9.2.1),并创建了指向{{1}的符号链接}。

这解决了问题。但是问题是:这是解决问题的正确方法吗?还是可以适当地配置 golang 使用的 GCC

非常感谢任何澄清!

4 个答案:

答案 0 :(得分:2)

由于看起来您已经使用Linuxbrew安装了go,所以也可以安装gcc-5

brew install gcc@5

这为我彻底解决了问题。

答案 1 :(得分:1)

(不是一个真正的答案,因为您问的不是一个真正的问题,请参阅下文。)

您的情况似乎有很多问题;让我们考虑一下。

首先要考虑的是,“ Go”意味着两件事:具有特定语法和语义的语言,以及其中的实现之一。

Go-the-language至少有两个成熟的实现:“参考”(一种可以从Go的main site中获得),另一种是GCC的一部分。股票的当代Debian发行版(Debian 10,“ Buster”)都将它们同时发布:golang-go是前者,gccgo是后者。

如您所见,首先不清楚安装的是哪个。

要考虑的第二件事是,引用实现(由于我忘记了原因,被其原始开发人员称为gc)是完全独立的(甚至是自启动的),并且不使用任何C编译器( (来自GCC或其他组织)来构建Go代码。相反,gccgo自然使用GCC工具链的其他部分来构建Go代码。

仍然,Go代码具有称为cgo的特殊子系统,可用于将Go代码与用C编写的代码(以及遵循C API的已编译库)进行接口。在构建使用{{1 }},这两个Go套件 do 至少都依赖C编译器(并且可能是链接器,我不确定这是肯定的),并且默认情况下cgo希望能够使用兼容GCC的编译器,自然gc也使用GCC的C编译器。

现在让我们回顾一下。

您应该现在应该看到的,至少应该为您整理几件事:

  • 您正在谈论(和/或想要安装)Go的哪种实现?
  • gccgo所安装的确实是您想要得到的吗?
  • 您要构建的代码是否使用brew

要考虑的第四件事是,为什么在地球上您决定使用一种发明的方法来帮助Mac用户弥补其平台上缺少软件包管理系统来处理Debian中的软件包。

Debian已经发布了Go;如果您对它的打包版本(1.11)不满意,那么仅从https://golang.org/dl获取最新,最伟大的二进制包,解开并使用它似乎更简单。

要考虑的另一件事是,由于1.5版Go是用Go语言编写的,因此它是自引导的,因此,如果您想拥有最新的上游版本,则可以cgo来拥有 some < / em>版本的Go安装了-然后使用它来构建最新版本,例如:

  1. 获取Go源代码:

    apt install golang-go
  2. 选择您要构建的版本:

    $ cd ~
    $ mkdir golang
    $ git clone https://github.com/golang/go golang
    
  3. 然后确保您的$ cd golang $ git checkout go1.13.5 $ cd src $ ./make.bash 中列出了/home/user/golang/bin

请注意,构建Go的过程非常快:在配备SSD的笔记本电脑上,它可以在一分钟内从冷启动中构建出来。

答案 2 :(得分:1)

另一种尝试的方法是将CC环境变量设置为gcc

答案 3 :(得分:0)

在 linuxbrew 中遇到了这个问题。修复运行:

go env -w CC=gcc CXX="g++"

这使用系统 gcc/g++ 而不是来自 linuxbrew 的那些