gpt4 book ai didi

go - 交叉编译 net/http 进行分发

转载 作者:IT王子 更新时间:2023-10-29 01:42:52 25 4
gpt4 key购买 nike

我在具有以下架构的 docker 容器中构建了以下代码:
猫/过程/版本Linux 版本 3.16.7-tinycore64 (root@064f0e1ce709) (gcc 版本 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() {}

然后我得到:
灰:./hello_world:未找到

我可能缺少一些依赖项——比如“net/http”?
但我认为 go build 会将所有内容构建到二进制文件中。
这适用于构建和安装。

有什么想法吗?

最佳答案

答案很可能是 this article 中描述的那个.

Some critical parts of the standard library use CGO [...] if you cross-compile Go to Darwin or Linux your programs won’t use the system DNS resolver. They also can’t use the native host certificate store. They also can’t look up the user’s home directory, either.

CGO 默认情况下动态链接到一些标准系统接口(interface)。

文章建议使用gonative解决问题。如果那不是你的菜,有些人建议使用:

go build -ldflags "-linkmode external -extldflags -static" 

另请阅读:https://groups.google.com/d/topic/golang-nuts/H-NTwhQVp-8/discussion

关于go - 交叉编译 net/http 进行分发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28307234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com