Go 1.13:gcc-5 不在 PATH 中

gss*_*der 4 installation gcc go

我已经使用brew , package在 Debian Linux 10 中安装了Go 1.13.4(之前我已经通过apt删除了安装)。它遵循输出。golanggolang-1.11brew 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)
Run Code Online (Sandbox Code Playgroud)

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

$ go build
# _/home/giacomo/src/goproc/process
exec: "gcc-5": executable file not found in $PATH
Run Code Online (Sandbox Code Playgroud)

所以我从测试(deb )存储库安装了最新的GCC(9.2.1)并创建了一个指向.http://ftp.us.debian.org/debian testing main contrib non-free/usr/bin/x86_64-linux-gnu-gcc-9

这解决了问题。但问题是:这是解决问题的正确方法吗?或者有没有地方可以正确配置golang使用的GCC

任何澄清非常感谢!

nem*_*emo 12

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

go env -w CC=gcc CXX="g++"
Run Code Online (Sandbox Code Playgroud)

这使用系统 gcc/g++ 而不是 linuxbrew 中的系统


hla*_*les 11

由于看起来您已经安装go了 linuxbrew,您还可以安装gcc-5

brew install gcc@5
Run Code Online (Sandbox Code Playgroud)

这为我解决了干净的问题。


Kev*_*lin 5

另一个可以尝试的选择是将CC环境变量设置为gcc.

  • 最简单、最干净的解决方案。我在 Debian 上运行得很好! (2认同)

kos*_*tix 3

(这并不是一个真正的答案,因为您问的几乎不是一个真正的问题\xe2\x80\x94,请参见下文。)

\n\n

您的情况有很多地方似乎不正确;让我们把它们全部考虑一下。

\n\n

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

\n\n

Go 语言至少有两个成熟的实现:“参考”一个 \xe2\x80\x94 可从 Go 的主站点\xe2\x80\x94 获得,另一个 \xe2\x80\x94 是 GCC 的一部分。现代 Debian 发行版(Debian 10,“Buster”)同时提供了两者:golang-go前者,gccgo后者。

\n\n

正如您所看到的,首先并不清楚您安装了哪个。

\n\n

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

\n\n

尽管如此,Go 代码仍具有一个名为 的特殊子系统cgo,可用于将 Go 代码与用 C 编写的代码(以及遵循 C API 的编译库)连接起来。在构建使用 的程序时cgo,两个 Go 套件至少依赖于 C编译器(可能是链接器\xe2\x80\x94,我不确定),默认情况下gc期望能够使用GCC兼容的编译器,自然gccgo也使用GCC的C编译器。

\n\n

现在让我们回顾一下。

\n\n

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

\n\n
    \n
  • 您正在谈论(和/或想要安装)Go 的哪种实现?
  • \n
  • 您安装的内容brew真的是您想要的吗?
  • \n
  • 您尝试构建的代码可以使用吗cgo
  • \n
\n\n

第四件要考虑的事情是,你到底为什么决定使用一个 kludge 来帮助 Mac 用户弥补其平台上软件包管理系统的不足,以处理 Debian 中的软件包。

\n\n

Debian 已经发布了 Go;如果您对其打包版本(1.11)不满意,只需从https://golang.org/dl获取最新且最好的二进制包,解压并使用它看起来更简单。

\n\n

另一件需要考虑的事情是,由于版本 1.5 Go 是自引导的,因为它是用 Go 编写的,所以如果你想拥有最新的上游版本,你可以只apt install golang-go\xe2\x80\x94 来安装某个版本的 Go \xe2\x80\x94 然后用它来构建最新的,如下所示:

\n\n
    \n
  1. 获取Go源码:

    \n\n
    $ cd ~\n$ mkdir golang\n$ git clone https://github.com/golang/go golang\n
    Run Code Online (Sandbox Code Playgroud)
  2. \n
  3. 选择您要构建的版本:

    \n\n
    $ cd golang\n$ git checkout go1.13.5\n$ cd src\n$ ./make.bash\n
    Run Code Online (Sandbox Code Playgroud)
  4. \n
  5. 然后确保您已/home/user/golang/bin在您的$PATH.

  6. \n
\n\n

请注意,构建 Go 的速度快如闪电:在配备 SSD 的笔记本电脑上,它可以在不到一分钟的时间内从冷启动开始构建。

\n