为了账号安全,请及时绑定邮箱和手机立即绑定

交叉编译net/http进行分发

交叉编译net/http进行分发

Go
子衿沉夜 2021-09-13 15:23:50
我在具有以下架构的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 UTCpackage mainimport "fmt"func main() {    fmt.Println("Hello")}二进制分布式,在busybox容器上运行没有问题,具有相同的架构,无需安装golang。问题当我对以下代码执行相同操作时:package mainimport (    "fmt"    "net/http")const (    port = ":80")var calls = 0func 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。任何的想法?
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

我认为您需要禁用 cgo 并使用netgoflag进行构建:

net 包默认需要 cgo,因为主机操作系统通常必须调解网络调用设置。但是,在某些系统上,可以在没有 cgo 的情况下使用网络,这样做很有用,例如避免动态链接。新的构建标签 netgo(默认关闭)允许在可能的情况下在纯 Go 中构建 net 包。

netgo标签需要1.2 及以上版本。


查看完整回答
反对 回复 2021-09-13
  • 2 回答
  • 0 关注
  • 246 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信