&引用;ELF可执行文件errno“中没有调试信息;运行使用gccgo构建的二进制文件时
我决定试一试,因此编写了以下代码:&引用;ELF可执行文件errno“中没有调试信息;运行使用gccgo构建的二进制文件时,go,gccgo,Go,Gccgo,我决定试一试,因此编写了以下代码: 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 exec
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
到底发生了什么?首先,不要使用gccgo,它不支持Go 1.3 其次,Go的运行时依赖于调试信息,我猜您使用的是一个较旧版本的gcc(可能是4.8),它会自动剥离它,您必须像
gccgo-gmain.Go-omain
一样运行它
如果你正在使用ubuntu,这是相关的 根据我的
gcc--version
的输出,我使用的是版本4.9.1。显然,即使是自动删除调试信息!添加-g
修复了这个问题。奇怪的是,它不应该向发行版的gccgo维护人员报告一个bug。但是正如我指出的,请使用go
本身,gccgo只支持go 1.2。gccgo
与gc
套件相比有其自身的优点,使用它可能有正当的理由。例如,您可能希望有一个动态链接的可执行文件(针对libgoN.so
或类似文件)。另一种情况是,gccgo
目前更擅长优化CPU密集型代码(如在适用的情况下进行矢量化)。因此,请至少确保提出问题的两个方面,而不仅仅是其中一个。发布说明也包括在GCC bug跟踪器上: