交叉编译net/http进行分发

我在具有以下架构的

docker容器中构建了以下代码:cat /proc/version Linux version 3.16.7-tinycore64 (root@064f0e1ce709) (gcc version 4.7.2 (Debian 4.7.2-5) ) #1 SMP 2014 年 12 月 16 日星期二 23:03:39 UTC


package main


import "fmt"


func main() {

    fmt.Println("Hello")

}

二进制分布式,在busybox容器上运行没有问题,具有相同的架构,无需安装golang。



问题

当我对以下代码执行相同操作时:


package main


import (

    "fmt"

    "net/http"

)


const (

    port = ":80"

)


var calls = 0


func HelloWorld(w http.ResponseWriter, r *http.Request) {

    calls++

    fmt.Fprintf(w, "Hello, world! You have called me %d times.\n", calls)

}


func init() {

    fmt.Printf("Started server at http://localhost%v.\n", port)

    http.HandleFunc("/", HelloWorld)

    http.ListenAndServe(port, nil)

}


func main() {}

然后我得到:

ash: ./hello_world: not found


我可能缺少一些依赖项——比如“net/http”?

但我认为 go build 会将所有内容都构建到二进制文件中。

这适用于 go build 和 go install。


任何的想法?


子衿沉夜
浏览 248回答 2
2回答

慕娘9325324

我认为您需要禁用 cgo 并使用netgoflag进行构建:net 包默认需要 cgo,因为主机操作系统通常必须调解网络调用设置。但是,在某些系统上,可以在没有 cgo 的情况下使用网络,这样做很有用,例如避免动态链接。新的构建标签 netgo(默认关闭)允许在可能的情况下在纯 Go 中构建 net 包。该netgo标签需要1.2 及以上版本。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go