这是一个世界你好:
package main
import (
"fmt"
)
func main() {
fmt.Println("Go is great!")
}
放入hello.go
并使用以下命令进行编译:
go build -o hello_go_build hello.go
go build -o hello_go_build_gccgo --compiler gccgo hello.go
gccgo -o hello_gccgo_shared hello.go
gccgo -static -o hello_gccgo_static hello.go
首先,我注意到hello_go_build_gccgo
并hello_gccgo_shared
没有相同的大小。我在互联网上寻找信息没有成功。谁知道那是为什么?甚至更好的是,有人可以告诉我如何解决这个问题吗?我试图用该-work
标志保留临时文件,但找不到相关信息。
然后,您可能会注意到,两个静态链接的二进制文件也不具有相同的大小。实际上,使用go build
(hello_go_build
)命令编译的代码不仅可以在我的系统上运行,而且还可以在具有其他Linux发行版的其他系统上运行,而hello_go_build_gccgo
在我的系统以及出现以下错误的其他系统上则失败:
panic: runtime error: invalid memory address or nil pointer dereference
这是一个要解决的错误:https : //groups.google.com/forum/?fromgroups=#!topic/golang- nuts/ y2RIy0XLJ24
最后,即使现在,大小不再重要,我很好奇:是否有任何 go 编译器可以选择进行函数级链接(而不是静态链接整个包,只链接所需的函数及其依赖项)?
慕丝7291255
相关分类