【问题标题】:"no debug info in ELF executable errno" when running a binary built with gccgo运行使用 gccgo 构建的二进制文件时出现“ELF 可执行 errno 中没有调试信息”
【发布时间】:2014-08-01 13:58:14
【问题描述】:

我决定试一试 Go,因此编写了以下代码:

package main

import "fmt"

func main() {
    fmt.Printf("Hello, World\n")
}

我将它保存在main.go 下,然后尝试使用gccgo main.go -o main 编译它。这行得通。但是,当我尝试./main 时,我收到了以下消息:

no debug info in ELF executable errno -1
fatal error: no debug info in ELF executable

runtime stack:
no debug info in ELF executable errno -1
panic during panic

到底发生了什么?

【问题讨论】:

标签: go gccgo


【解决方案1】:

首先,不要使用 gccgo,它不支持 Go 1.3。

其次,Go 的运行时间取决于调试信息,我猜你使用的是旧版本的 gcc(可能是 4.8),它会自动剥离它,你必须像 gccgo -g main.go -o main 一样运行它。

如果您使用的是 ubuntu,则此 bug 是相关的。

【讨论】:

  • 根据我gcc --version的输出,我使用的是4.9.1版本。显然,即使这样会自动剥离调试信息!添加-g 解决了这个问题。
  • 奇怪,不应该,应该向发行版的 gccgo 维护者报告错误。
  • 但是就像我指出的,请使用go 本身,gccgo 只支持 Go 1.2。
  • gccgogc 套件相比有其自身的优点,使用它很可能有正当理由。例如,一个人可能想要一个动态链接的可执行文件(针对libgoN.so 或类似的)。另一种情况是gccgo 目前更擅长优化 CPU 密集型代码(例如在适用的情况下进行矢量化)。所以请至少确保提出问题的两面,而不仅仅是其中之一。发行说明还有hint that GCC 4.10 will likely have Go 1.4 implemented
猜你喜欢
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 2010-10-13
  • 2011-09-27
  • 1970-01-01
相关资源
最近更新 更多